doni: Dateiausgabe ist seltsam sortiert

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&amp;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

  1. 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

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. 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

      --
      Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
      1. hi,

        http://de2.php.net/manual/de/function.getimagesize.php

        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

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hi,

          Hast du dazu zufällig weitergehende Info parat?
          (Bugtracker-Eintrag o.ä.)

          Nein. Ist mir nur mal aufgefallen ... ;)

          Gruß, Cybaer

          --
          Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  2. 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

    --
    Fettflecke werden wieder wie neu, wenn man sie regelmäßig mit etwas Butter einschmiert.