Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

ordner in "richtiger" reihenfolge auslesen





Frage

hallo ich hab diese funktion: [code]$galerie=$_GET['galerie']; $open = opendir ('bilder/'.$galerie.'/'); $bild=0; while ($file = readdir ($open)) { if($file != "." && $file != ".." && $file != "Thumbs.db") { echo '<td><img src="bilder/'.$galerie.'/'.$file.'" border="0"></td>'; $bild++; }} closedir($open);[/code] damit lese ich einen ordner mit bilder aus. die bilder sind im format: [b]2007-10-13_18-17-10.jpg[/b] d.h. das datum an dem sie uploadet wurden. d.h. wenn ich diesen ordner auslese wird als erstes das älteste bild angezeigt ich möchte aber, dass das neueste bild als erstes ausgelesen und angezeigt wird. gaht da smit dieser funktion... wie z.b. bei sql mit [b]DESC[/b] und [b]ASC[/b] mfg timo

Antwort 1 von bubbelbub

Obwohl ich dazu nichts schreiben dürfte (hatte bisher wenig mit dieser Syntax zu tun) nur soviel:

Dateien sind im Betriebssystem nie in einer bestimmten Reihenfolge abgelegt. Wenn - und davon gehe ich aus - dein Skript auf eine MS-Betriebsystemroutine zurückgreift, werden die Dateien in der physikalischen Reihenfolge abgelegt, die in deinem Fall, da der Name das Speicherdatum ist, genau rückwärts zurückgegeben werden. Es kann aber auch eine x-beliebige Reihenfolge sein. Daher verlasse dich nie darauf, daß Windows sich an irgend eine "Reihenfolge" hält.

Zu deinem Problem. Wie gesagt, kann ich diese Sprache nun gerade nicht und weiß nicht, ob es eine SORT oder DESC oder ASC usw. Funktion gibt. Wenn ja, nimmst du die natürlich. Wenn nein, kannst du wie folgt vorgehen:

1) Alle Dateien zunächst in ein Array einlesen (oder eine MySQL, T-SQL, ... - Tabelle). Dein Skript ist dazu sehr geeignet

2) Über SQL kannst du mit SELECT * .... ORDER BY .... DESC/ASC die gespeicherten Daten in einer dir angenehmen Reihenfolge wieder ausgeben.

Viel Erfolg.

Antwort 2 von MixMax

du kannst das verzeichniss in ein Array lesen und das Array nach Name sortieren:


    if ($dh = opendir('./')) {
        $files = array();
        while (($file = readdir($dh)) !== false) {

# evtl schon ergebnisse eingrenzen
            if (substr($file, strlen($file) - 5) == '.html') { 
                array_push($files, $file);
            }

        }
        closedir($dh);
    }
    
   # Sortiere das Array
    sort($files);
    foreach ($files as $file) {
# code für jede Datei
    }


Antwort 3 von son_quatsch

Versuche das hier:

$galerie=$_GET['galerie'];
while (strpos($galerie, '..')!== false) {
  $galerie= str_replace('..', '', $galerie);
}

$bild=0;
$feld= array();

if ($open = opendir ('bilder/'.$galerie.'/')) {
  while (false !== ($file = readdir($open))) {
    if($file != "." && $file != ".." && $file != "Thumbs.db") {
      $feld[$bild++]= $file;
    }
  }
  closedir($open);
}

rsort($feld);

foreach ($feld as $wert) {
  echo '<td><img src="bilder/'.$galerie.'/'.$wert.'" border="0" /></td>'. "\n";
}

echo '<td><b>'. $bild. ' Datei(en)</b></td>';


(ungetestet)

Antwort 4 von timoxy

danke son_quatsch
deine Antwort hat das Problem gelöst.

noch eine frage, wie mach ich des jetzt wenn ichs in der richtigen Reihenfolge auslesen möchte??

ist dadafür dieser befehl rsort($feld) zuständig??




danke auch an bubbelbub für die Information hab ich nicht gewusst... hab mich immer nur gewundert, wieso der des in jedem Browser anders ausließt... danke

danke auch an MixMax obwohl ich mit deiner antwort noch nicht so viel anfangen konnte, da ich nicht genau weiß, was ich da noch ergänzen muss... trotzdem danke für die Mühe.

timo

Antwort 5 von son_quatsch

Es gibt kein "richtiges" auslesen, da die vom System gelieferten Dateinamen eines Verzeichnisses keiner Ordnung unterliegen.

Ein rsort() wiederum kann aber die Elemente eines Feldes anhand ihrer Werte neu-ordnen. Daher liegt es nahe, sämtliche Dateinamen erst in ein Feld aufzustocken und dieses dann zu ordnen.

Antwort 6 von timoxy

hallo,

ich habe mich in meinem letzten Beitrag vill ein bisschen falsch ausgedrückt...

also nochmal:

mit dem befehl aus Antwort 3 werden die Dateien in der Reihenfolge Z-A sortiert.

wie mach ichs jetzt, dass der in der Reihenfolge A-Z sortiert??

MfG Timo

Antwort 7 von son_quatsch

Zitat:
die bilder sind im format: 2007-10-13_18-17-10.jpg d.h. das datum an dem sie uploadet wurden.

d.h. wenn ich diesen ordner auslese wird als erstes das älteste bild angezeigt ich möchte aber, dass das neueste bild als erstes ausgelesen und angezeigt wird.
Ja ich denke das wolltest Du extra so? Z-A oder 9-0.

Für A-Z oder 0-9 nimm einfach sort()

Antwort 8 von timoxy

Zitat:

danke son_quatsch
deine Antwort hat das Problem gelöst.


hab ja geschireben, dass das das problem gelößt hat wollt jetzt nur noch zur vollstängigkeit wissen, wie mans macht, dass von A-Z oder 0-9 sortiert wird.


dnake..


timo

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: