php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Verzeichniss auslesen und dateinamen in eine Datei schreiben ?!


 
Kaptain5000
19-11-2005, 18:10 
 
Hallo,

ich möchte ein Verzeichniss auslesen in dem Bilder und videos liegen.
Die Dateien sollen gezählt werden und in einer html seite untereinander angezeigt werden.

dann sollte die ausgabe aber nur ca. 500 treffer ausgeben. und das ist mein problem !

für den rest habe ich schon folgenden code hier.

<?php
$dir = "files/";
$handle = opendir($dir);
$files = array();
while($file = readdir($handle)) {
if(($file != "..") AND ($file != ".")) $files[] = $file;
}
closedir($handle);
$n = (count(files)==1)?"":"n";
echo count($files);
foreach($files as $name) echo "<a href=\"".$dir.$name."\">".$name."</a><br>\r\n";
?>

dieser code gibt also den gesamten inhalt des verzeichnisses aus und verlinkt ihn mit dem jeweiligen inhalt.

wie aber sag ich jetzt das bitte nur 500 treffer ausgegeben werden sollen und die immer anders also gemischt.

könnte mir da vielleicht einer helfen ??

 
onemorenerd
19-11-2005, 18:14 
 
Dateinamen in Array speichern
500 zufällige Elemente des Arrays ausgeben

 
wahsaga
19-11-2005, 18:14 
 
Original geschrieben von Kaptain5000
wie aber sag ich jetzt das bitte nur 500 treffer ausgegeben werden sollen und die immer anders also gemischt.
Du hast bereits alles im Array $files vorliegen - also lasse dieses zufällig durchmischen (Funktion dazu findest du im Manual), und gebe dann vom Durchgemischten die ersten 500 Einträge aus (bspw. for-Schleife).

 
Kaptain5000
19-11-2005, 18:35 
 
puuuuu ihr sagt das so leicht... leider hab ich nicht sehr viel ahnung von php der code war nur ein zufallstreffer über google ;-)

also ich wäre um hilfe sehr dankbar !!

 
Heini81
19-11-2005, 18:55 
 
$dir = "files/";
$handle = opendir($dir);
$files = array();
while($file = readdir($handle)) {
if(($file != "..") AND ($file != ".")) $files[] = $file;
}
closedir($handle);
$n = (count(files)==1)?"":"n";
echo count($files);
shuffle($files);
for ($i = 1; $i <= 500; $i++) {
echo "<a href=\"".$dir.$files[i]."\">".$files[i]."</a><br>\r\n";
}

So sollte es funktionieren. Wenn deine PHP-Version älter als 4.2.0 ist, musst du noch z.B. srand ((float)microtime()*1000000); vor shuffle($files) setzen.

Achja, wenn weniger als 500 Dateien im Ordner sind, gibt es auch ein Problem...

 
wahsaga
19-11-2005, 19:08 
 
Original geschrieben von Heini81
Achja, wenn weniger als 500 Dateien im Ordner sind, gibt es auch ein Problem...
Leicht zu vermeiden ...

for ($i=0; $i < 500; $i++) {
if(!isset($files[i])) break;
echo '<a href="'.rawurlencode($dir.$files[i]).'">'.$files[i]."</a><br>\r\n";
}
Btw: Index sollte natürlich bei 0 anfangen, und rawurlencode sollte auch nicht fehlen, falls die Bildnamen Sonderzeichen enthalten.

 
Heini81
19-11-2005, 19:12 
 
Genau... :D Würde Fußball nicht schon angefangen haben, hätte ich es selbst gemacht.... ;)

 
Kaptain5000
19-11-2005, 19:18 
 
Original geschrieben von Heini81

$dir = "files/";
$handle = opendir($dir);
$files = array();
while($file = readdir($handle)) {
if(($file != "..") AND ($file != ".")) $files[] = $file;
}
closedir($handle);
$n = (count(files)==1)?"":"n";
echo count($files);
shuffle($files);
for ($i = 1; $i <= 500; $i++) {
echo "<a href=\"".$dir.$files[i]."\">".$files[i]."</a><br>\r\n";
}

So sollte es funktionieren. Wenn deine PHP-Version älter als 4.2.0 ist, musst du noch z.B. srand ((float)microtime()*1000000); vor shuffle($files) setzen.

Achja, wenn weniger als 500 Dateien im Ordner sind, gibt es auch ein Problem...

ne das wars noch nicht ganz ...

schau mal das hat er jetzt ausgeworfen !

26889<a href="files/"></a><br>
<a href="files/"></a><br>
<a href="files/"></a><br>
<a href="files/"></a><br>
<a href="files/"></a><br>

 
Kaptain5000
19-11-2005, 19:36 
 
das ganze hat er übriegens 500 mal gemacht nur eben leer. ich weiß auch ehrlich gesagt nicht wo der fehler ist.. :confused:

 
Heini81
19-11-2005, 22:18 
 
Was steht denn in deinem Array $files? Mach mal ein print_r($files); und poste mal ein bisschen vom Code...

 
DSB
20-11-2005, 00:40 
 
$max=(sizeof($files)<500) ? $sizeof($files):500;
for ($i = 0; $i < $max; $i++) {

So lässt sich das Problem bei weniger als 500 Files lösen.


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:03 Uhr.