Verzeichnis listen - Hilfe bei Loop

wallcity

New Member
Hallo ihr lieben, habe eine Frage also ich würde gerne mein Verzeichnis listen per PHP. Soweit bin ich jetzt auch, habe per count jetzt auch meine maximale Anzahl begrenzt, da ich es gerne halt auf mehreren Seiten haben möchte, dass halt die erste Seite die ersten 8 Einträge anzeigt und dann halt weiter führend, weitere 8 Einträge angezeigt werden sollen.

PHP:
$dirlist = @opendir("./pages/uploads/".$port."/") or header('Location: server_mp3.php?error=dirlisting');
$aryFiles = array();
while (count($aryFiles)<8 && (($datei = readdir($dirlist)) !== false)) {
	if(($datei!=".") and ($datei!="..")) {
		$aryFiles[] = $datei;
		echo "<tr>
		<td>$datei</td>
		<td>".round((filesize("./pages/uploads/".$port."/".$datei)/1024), 2)." KB (".round((filesize("./pages/uploads/".$port."/".$datei)/1024/1024), 2)." MB)</td>
		<td><a class=\"delete\" href=\"edit.php?base=".base64_encode($datei)."\">löschen</a></td>
		</tr>";
	}
}
closedir($dirlist);

Nun möchte ich halt wissen wie ich halt dann bei der nächsten Seite von dem 9ten Eintrag dann anfange es zu listen.

Vielen Dank im vorraus =)
 
Last edited by a moderator:
Ich hab mal das Grundgeruest umgeschrieben, so ist es um einiges flexibler (aber weiterhin prozedural)
PHP:
define('entries_per_page',9);

function redirect($location) {
   header('Location: '.$location); 
   die();
}

//Check requested page
if(!isset($_GET['page']) OR !is_numeric($_GET['page']) $page = 1;
else $page = $_GET['page']
$page_start = $page * entries_per_page - entries_per_page -1;
$page_end = $page * entries_per_page -1;

//Make sure folder is escaped
$folder = str_replace(array('.','/','\\'),'',$port);
//Scan folder contents
$dirlist = @scandir($folder) or redirect('Location: server_mp3.php?error=dirlisting');

//Check if page exists
if(!isset($dirlist[$page_start])) redirect('Location: server_mp3.php?error=dirlisting');

//Print contents
for($i=$page_start;$i<=$page_end;$i++) {
   //Dummy content
   echo $dirlist[$i].PHP_EOL;
}

Uebrigens sollte nach header("Location: ...") immer ein die() kommen :)
Der Code ist _nicht_ getestet sondern aus dem Kopf hingeworfen. Funktionsfaehigkeit nicht garantiert :)
 
Last edited by a moderator:
Hallo zunächst mal vielen Dank für diese Antwort.
Der Code hatte zwei weitere kleine Fehler die ich aber behoben habe,
nun hab ich aber ein kleines Problem, dass wenn ich zb dann page=2 über GET aufrufe, will der den Redirect von dieser Zeile aufrufen:
PHP:
//Check if page exists
if(!isset($dirlist[$page_start])) redirect('Location: server_mp3.php?error=dirlisting');

Habe den Script jetzt wie folgt:
PHP:
<?php
define('entries_per_page',9);

function redirect($location) {
   header('Location: '.$location); 
   die();
}

//Check requested page
if(!isset($_GET['page']) or !is_numeric($_GET['page'])) $page = 1;
else $page = $_GET['page'];
$page_start = $page * entries_per_page - entries_per_page -1;
$page_end = $page * entries_per_page -1;

//Make sure folder is escaped
$folder = str_replace(array('.','/','\\'),'',$port);
//Scan folder contents
$dirlist = @scandir("./pages/uploads/8400") or redirect('Location: server_mp3.php?error=dirlisting');

if(isset($dirlist[$page_start])) redirect('Location: server_mp3.php?error=dirlisting');

//Print contents
for($i=$page_start;$i<=$page_end;$i++) {
   //Dummy content
   echo $dirlist[$i].PHP_EOL;
}  
?>

Wäre nice wenn du mir da grad nochma helfen könntest =) sonst super danke!
 
Habs jetzt hinbekommen also vielen vielen Dank für deine Message und deine Hilfe dies ist das Script jetzt:

Habe manches geändert oder angepasst:

PHP:
define('entries_per_page',7);
if(!isset($_GET['filecount']) or !is_numeric($_GET['filecount'])) $offset = 1;
else $offset = $_GET['filecount'];
if ($offset == 1) {
	$listing_start = $offset * entries_per_page - entries_per_page;
}
else {
	$listing_start = $offset * entries_per_page - entries_per_page + 3;
}					
$listing_end = $offset * entries_per_page + 2;
$dirlisting = @scandir("./pages/uploads/".$port) or $errors[] = "<h2>Das Verzeichnis konnte nicht ausgelesen werden!</h2>";
if(!isset($dirlisting[$listing_start])) $errors[] = "<h2>Das Verzeichnis konnte nicht ausgelesen werden!</h2>";
for($i=$listing_start;$i<=$listing_end;$i++) {
	if (($dirlisting[$i]!=".") and ($dirlisting[$i]!="..") and ($dirlisting[$i]!="")) {
		echo "<tr>
			<td>$dirlisting[$i]</td>
			<td>".round((filesize("./pages/uploads/".$port."/".$dirlisting[$i])/1024), 2)." KB (".round((filesize("./pages/uploads/".$port."/".$dirlisting[$i])/1024/1024), 2)." MB)</td>
			<td><a class=\"delete\" href=\"mp_upload.php?portbase=".$port."&delete=".base64_encode($dirlisting[$i])."\">löschen</a><a class=\"selector\" href=\"mp_upload.php?portbase=".$port."&download=".base64_encode($dirlisting[$i])."\">download</a></td>
			</tr>";
	}
}

Falls jemand noch einen Fehler findet, bitte dazu hier antworten danke =)

p.s. Ich weiß das man die Variablen str_replace soll, das geschieht schon in meinem Code vorher, also wer nur diesen Code benutzt bitte noch auf str_replace nicht verzichten =)
 
Last edited by a moderator:
Back
Top