Sortierreihenfolge von Dateinamen mit PHP
Moin zusammen,
ich bastel gerade an einer eigenen Lösung für ein Fotoalbum. Dabei kommt der folgende Codeschnipsel zum Einsatz:
In $dir1 sind die Bilder in Vollformat, in $dir2 stehen die Thumbnails dazu. Beide Verzeichnisse sind, wenn ich per FTP auf den Server gehe, identisch aufgebaut. Sie enthalten die gleiche Anzahl von Dateien und die Dateien stehen auch in identischer Reihenfolge und haben identische Namen.
Die Thumbs werden angezeigt, nur die zugehörigen Vollbilder sind ganz andere.
Die Dateien enthalten im Namen keine Umlaute, Leer- oder Sonderzeichen mehr. Diese habe ich nach dem Upload entsprechend abgeändert. Und da scheint mir der Knackpunkt zu liegen, denn wenn ich mir die Anzeige der Bilder so ansehe, so ist das erste Bild nicht eines, welches mit einer Zahl beginnt, sondern mit einem Buchstaben (das mit der Zahl hatte eine Leerstelle im Namen, die ich durch einen Unterstrich ersetzt habe).
Der Ziel-Server läuft unter einem Unix-Derivat, so daß ich schon auf die Schreibweise Groß-/Kleinschreibung geachtet habe.
Gibt es unter Unix eine andere Sortierfolge als unter Windows (Zahlen vor Buchstaben)?
Habe ich da irgendwas übersehen, was das Hochladen und umbenennen angeht, oder hat sich ein Gedankenfehler eingeschlichen?
Gruß J chem
PS: Habt ihr noch eine Idee, wie ich von der Galerie-Anzeige zum Vollbild wechseln und dann im Vollbild-Modus weiterblättern kann, ohne Javascript zu bemühen? Ich würde es gerne komplett in PHP lösen. Danke.
ich bastel gerade an einer eigenen Lösung für ein Fotoalbum. Dabei kommt der folgende Codeschnipsel zum Einsatz:
<?php
function readDirRecursive($dir)
{
if (false === is_dir($dir)) {
return false;
}
$handle = opendir($dir);
if (false === $handle) {
return false;
}
$result = array();
while (false !== ($file = readdir($handle))) {
// Ausschluss von . und ..
if ('.' == $file || '..' == $file) {
// nächstes Element
continue;
}
// Array Zuweisung des Dateinamens
$result = $file;
}
closedir($handle);
return $result;
}
$dir = $HTTP_GET_VARS["dir"];
$root = '../Bilder3/';
$subdir1 = '/thumbs';
$subdir2 = '/slides';
$dir1 = $root.$dir.$subdir1;
$result = readDirRecursive($dir1);
$pics1 = $result;
if (sizeof($pics1))
$anz1 = (sizeof($pics1));
else
echo 'Verzeichnis '.$pics1.' nicht gefunden';
$dir2 = $root.$dir.$subdir2;
$result = readDirRecursive($dir2);
$pics2 = $result;
if (sizeof($pics2))
$anz2 = (sizeof($pics2));
else
echo 'Verzeichnis '.$pics2.' nicht gefunden';
for ($i = 0; $i < $anz1; $i++) {
$bild = $dir2.'/'.$pics2[$i];
$daum = $dir1.'/'.$pics1[$i];
echo '<a href="'.$bild.'" height="600" width="800" target="_blank"><img src="'.$daum.'" height="90" width="120" border="2" alt="Bild'.$i.'"</img></a>';
}
?>
In $dir1 sind die Bilder in Vollformat, in $dir2 stehen die Thumbnails dazu. Beide Verzeichnisse sind, wenn ich per FTP auf den Server gehe, identisch aufgebaut. Sie enthalten die gleiche Anzahl von Dateien und die Dateien stehen auch in identischer Reihenfolge und haben identische Namen.
Die Thumbs werden angezeigt, nur die zugehörigen Vollbilder sind ganz andere.
Die Dateien enthalten im Namen keine Umlaute, Leer- oder Sonderzeichen mehr. Diese habe ich nach dem Upload entsprechend abgeändert. Und da scheint mir der Knackpunkt zu liegen, denn wenn ich mir die Anzeige der Bilder so ansehe, so ist das erste Bild nicht eines, welches mit einer Zahl beginnt, sondern mit einem Buchstaben (das mit der Zahl hatte eine Leerstelle im Namen, die ich durch einen Unterstrich ersetzt habe).
Der Ziel-Server läuft unter einem Unix-Derivat, so daß ich schon auf die Schreibweise Groß-/Kleinschreibung geachtet habe.
Gibt es unter Unix eine andere Sortierfolge als unter Windows (Zahlen vor Buchstaben)?
Habe ich da irgendwas übersehen, was das Hochladen und umbenennen angeht, oder hat sich ein Gedankenfehler eingeschlichen?
Gruß J chem
PS: Habt ihr noch eine Idee, wie ich von der Galerie-Anzeige zum Vollbild wechseln und dann im Vollbild-Modus weiterblättern kann, ohne Javascript zu bemühen? Ich würde es gerne komplett in PHP lösen. Danke.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 201646
Url: https://administrator.de/contentid/201646
Ausgedruckt am: 21.11.2024 um 20:11 Uhr
4 Kommentare
Neuester Kommentar
Hallo,
du musst dein Array mit dem Verzeichnisinhalt noch sortieren:
$bilder1 = asort($pics1);
#sowie
$bilder2 = asort($pics2);
Das Weiterblättern könnte so funktionieren:
$bild_zurueck = $dir2.'/'.$pics2[$i--];
$bild_weiter = $dir2.'/'.$pics2[$i++];
echo '<a href="'.$bild_zurueck.'">Zurueck</a>';
echo '<a href="'.$bild_weiter.'">Weiter</a>';
Du müsstest du nur prüfen, ob wir schon am Anfang bzw. am Ende des Arrays angelangt sind und dementsprechend (am Anfang z.B. nur noch Weiter) anzeigen lassen.
Gruß,
Florian
du musst dein Array mit dem Verzeichnisinhalt noch sortieren:
$bilder1 = asort($pics1);
#sowie
$bilder2 = asort($pics2);
Das Weiterblättern könnte so funktionieren:
$bild_zurueck = $dir2.'/'.$pics2[$i--];
$bild_weiter = $dir2.'/'.$pics2[$i++];
echo '<a href="'.$bild_zurueck.'">Zurueck</a>';
echo '<a href="'.$bild_weiter.'">Weiter</a>';
Du müsstest du nur prüfen, ob wir schon am Anfang bzw. am Ende des Arrays angelangt sind und dementsprechend (am Anfang z.B. nur noch Weiter) anzeigen lassen.
Gruß,
Florian
Super. Freut mich, dass ich dir helfen konnte.
Magst du freundlicherweise die Frage dann als "gelöst" markieren?
Gruß,
Florian
Magst du freundlicherweise die Frage dann als "gelöst" markieren?
Gruß,
Florian