Einzelnen Beitrag anzeigen
  #6 (permalink)  
Alt 16-10-2008, 19:33
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Aua aua. Du iterierst in einer While-Schleife über ein Verzeichnis und schreibst die Dateinamen in ein Textfile. Warum öffnest und schließt du die Datei immer wieder? Mach sie einmal auf, schreib alles rein und mach sie dann wieder zu. Das geht viel schneller ... und ist weniger peinlich.
Also einmal fopen(), in der Schleife immer nur fwrite() und am Ende des Scripts fclose(). Das Problem mit dem Zeilenumbruch bleibt aber bestehen. Deshalb rate ich eher zu dieser Lösung:
PHP-Code:
$pics = array();
$path 'album/'
$dir opendir($path); 
while (
$file readdir($dir)) {
    if (
is_file($path.$file) && $size getimagesize($path.$file)) {
        
$pics[] = $file.'#'$size[0].'#'.$size[1];
    }
}
closedir($dir);
file_put_contents('picturelist.txt'implode("\n"$pics)); 
Das # als Trennzeichen kann übrigens gefährlich sein. Was passiert, wenn ein Bild mal ein # im Dateinamen trägt?

Das Lesen kannst du auch vereinfachen, etwa so:
PHP-Code:
foreach (file('picturelist.txt') as $i => $line) {
    list(
$name$width$height) = explode('#'$line); 
    echo 
'<a href="alben/'.$name.'"><img src="alben/tn/'.$name.' alt="'.$i.'" /></a>';

Wie du siehst, steht kein Zähler mehr in der Datei. Gezählt wird beim Lesen. Width und Height habe ich mal gelassen, obwohl ich nicht sehe, wo du es brauchst.

Zum Schluß noch die Sinnfrage: Warum machst du das alles? Warum erzeugst du diese Datei? Brauchst du sie noch für einen anderen Zweck? Wenn nicht, dann spar dir das Gehampel und machs direkt so:
PHP-Code:
foreach (glob('album/{*.gif,*.jpg,*.png}'GLOB_BRACE) as $i => $pic) {
    echo 
'<a href="alben/'.$pic.'"><img src="alben/tn/'.$pic.' alt="'.$i.'" /></a>';

Ich habe den Code übrigens nicht getestet. Mach das mal selbst.
Mit Zitat antworten