online 1
gast (50)

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

Skripte(PHP,ASP,Perl...)Skripte(PHP,ASP,Perl...)

Fragevon timoxy vom 14.10.2019, 00:40 Options

Lösung

ordner in "richtiger" reihenfolge auslesen

hallo

ich hab diese funktion:
$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);


damit lese ich einen ordner mit bilder aus.

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.

gaht da smit dieser funktion... wie z.b. bei sql mit DESC und ASC

mfg timo


Antwort schreiben

Antwort 1 von bubbelbub vom 14.10.2019, 01:27 Options

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 vom 14.10.2019, 04:22 Options

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 vom 15.10.2019, 12:23 OptionsLösung

Lösung
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 vom 18.10.2019, 15:09 Options

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 vom 22.10.2019, 12:04 Options

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 vom 22.10.2019, 12:13 Options

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 vom 22.10.2019, 19:56 Options

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 vom 22.10.2019, 22:02 Options

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

Ähnliche Themen

Ordner auslesen
ichibins  04.04.2007 - 91 Hits - 1 Antwort

Brennen meiner Fotos in richtiger Reihenfolge
NikonJS  03.11.2007 - 268 Hits - 2 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Thu Jan 8 21:07:44 2026