Dateiausgabe ist seltsam sortiert
doni
- php
0 Tom0 Der Martin
Hallo Zusammen,
Ich bin momentan eine Bildergalerie am basteln, sie funktioniert schon ganz schön. Habe aber ein "kleines" Problem, und zwar wird in der Album-Ansicht ein Verzeichnis nach Dateien ausgelesen, welche mit tn_ im Dateinamen beginnen und danach werden die Vorschaubilder angezeigt. Soweit so schön, klappt alles, nur sind einige (Nach meinen bisherigen Beobachtungen immer die letzen paar Bilder) der Vorschaubilder in der falschen Reihenfolge, also Bild 15 nach Bild 10 anstelle nach Bild 14.
Betrachten könnt ihr das Phänomen auf:
http://lightbox.telltec.ch/demo/index.php?gallery=First%20snow%20is%20falling
Problemkind hier ist z.B. Bild 15.
Der relevante Codeteil ist denke ich der hier:
-----
echo "<div id="pictures">";
// display all images within the album
$handle=opendir($datadir."/".$gallery);
while ($file = readdir ($handle)){
if ($file != "." && $file != ".." && substr($file, 0, 3) == "tn_"){
// remove the tn_ from the filname
$bigpicture = substr($file, 3);
// add a portrait class if necessary
$fullimagepath = $datadir."/".$gallery."/".$file;
$img = @imagecreatefromjpeg($fullimagepath);
if ($img) {
$img_width = imagesx($img);
$img_height = imagesy($img);
imagedestroy($img);
}
if ($img_width < $img_height){
$pictureclass = "class="portrait"";
} else{
$pictureclass = "";
}
echo "<a href="show.php?album=$gallery&picture=".$bigpicture."" ".$pictureclass."><img src="".$datadir."/".$gallery."/".$file."" alt="picture" /></a>\n";
}
}
closedir($handle);
----
Vielleicht habt ihr 'ne Ahnung warum das so seltsam rauskommt, denn so gut wie alle Bilder stimmen sonst.
Vielen Dank
doni
Hello,
ich würde mit glob() arbeiten. Das gibts schon lange genug.
http://de2.php.net/manual/de/function.glob.php
Und dann das Array mit natsort() sortieren lassen.
http://de2.php.net/manual/de/function.natsort.php
Bevor ich die Image-GFunktionen einsetze, würde ich erstnal prüfen, ob es überhaupt ein Bild ist. Hierfür eignet sich getimagesize()
http://de2.php.net/manual/de/function.getimagesize.php
Sieht schon gut aus.
Nur im IE5.5 stehen next> usw. im Bild und nicht darüber
Bei meinem Versuch eben hat Dein Server aber richtig sortiert.
Wie stellst Du die Sortierung denn her?
Wenn Du nur mit readdir() arbeitest, hast Du keinerlei Anspruch auf Sortierung.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hi,
Bevor ich die Image-GFunktionen einsetze, würde ich erstnal prüfen, ob es überhaupt ein Bild ist. Hierfür eignet sich getimagesize()
http://de2.php.net/manual/de/function.getimagesize.php
Wobei PHP ggf. abschmiert, wenn man die Funktion auf Dateien <12 Bytes losläßt:
if(!is_file($serverEntry) || filesize($serverEntry)<12) { continue; }
// Image-Informationen ermitteln
$imageInfo=getimagesize($serverEntry);
Gruß, Cybaer
hi,
Wobei PHP ggf. abschmiert, wenn man die Funktion auf Dateien <12 Bytes losläßt
Interessant.
Hast du dazu zufällig weitergehende Info parat?
(Bugtracker-Eintrag o.ä.)
gruß,
wahsaga
Hi,
Hast du dazu zufällig weitergehende Info parat?
(Bugtracker-Eintrag o.ä.)
Nein. Ist mir nur mal aufgefallen ... ;)
Gruß, Cybaer
Hallo,
Soweit so schön, klappt alles, nur sind einige (Nach meinen bisherigen Beobachtungen immer die letzen paar Bilder) der Vorschaubilder in der falschen Reihenfolge, also Bild 15 nach Bild 10 anstelle nach Bild 14.
ja, und warum erwartest du eine bestimmte Reihenfolge?
Soweit ich aus deinem Code entnehmen kann, verarbeitest du die Bilder einfach in der Reihenfolge, wie readdir() sie abliefert. Das ist dann sehr wahrscheinlich die physikalische Reihenfolge der Einträge im Verzeichnis. Sie _könnte_ davon abhängen, in welcher Reihenfolge die Dateien angelegt wurden, aber da spielen noch viele andere Unwägbarkeiten des Server-Filesystems mit rein.
Eine Sortierung nach einem erkennbaren Schlüssel ergibt sich dadurch aber i.d.R nicht.
Vielleicht habt ihr 'ne Ahnung warum das so seltsam rauskommt, denn so gut wie alle Bilder stimmen sonst.
Zufall...
Schönen Abend noch,
Martin