PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : open/readdir - Verzeichnislisten sortieren


StefanGe
26.02.2003, 14:37:00
Hi!

ich habe ein kleines PHP, mit dem ich den Inhalt von Verzeichnissen auslesen und anzeigen lasse:

<?PHP
$dirhandle = opendir("$folderA");
while ($file = readdir ($dirhandle))
echo "$file<br>";
?>

Frage 1:
Leider ist die Ausgabe unsortiert. Wie bekomme ich es hin, dass die ausgelesenen Dateien sortiert sind (nach "Name" - also alphabetisch - würde mir schonmal reichen!)? Auch kann ich in der Ausgabe bisher kein Sortier-System (Datum, Größe, Name) erkennen (da aber jedes Mal die selbe Sortierung rauskommt, muss es ja eins geben).

Frage 2:
Wie bekomme ich es hin, dass mir zusätzlich zum Dateinamen die Grafiken an sich gelistet werden (keine thumbnails, sondern 1zu1).

Bin leider PHP-Anfänger und danke Euch für Eure Hilfe!!! ...

Ben20
26.02.2003, 14:50:38
Sortiern kannst Du die Dateien nur, indem Du sie vor der Ausgabe in ein Array einließt, dieses Sortierst und dann ausgibst.

Die Sortierfunktionen findest Du in der Selfphpfunktionsreferenz.



Die Bilder läßt Du anzeigen indem Du bei der Ausgabe noch

"<img src="$varMitDemDateinameDrin" />"

mit einbaust!

StefanGe
26.02.2003, 22:27:14
Hallo Ben,

danke, ich bekomme es jetzt mit Krücken hin, in einer Tabelle in der linken Spalte mir die Grafiken aus Verzeichnis A und in der rechten Spalte die Grafiken aus Verzeichnis B zu listen.
Sehr stark verkürzt also sowas:
<?PHP
$folder1 = opendir("$folderA1");
while($fA1 = readdir ($folder1))
echo "<IMG SRC="$folder1/$fA1">"
?>
Die Ordnerangabe kommt aus einem Eingabefeld mit dem Namen "folderA1".
Nur wie bekomme ich jetzt vor der Ausgabe die Grafiken in "$fA1"vorher sortiert? *Wo* baue ich das array ein? Mit den Beispielen in der Funktionsreferenz komme ich leider gar nicht klar :-(
Wäre sehr dankbar für einen Tip :-)

Matthias
26.02.2003, 23:11:14
So klappt's
$folder1=opendir("$folderA1");
while($fA1=readdir ($folder1))
{
if(is_file($fA1)) $afile[]=$fA1;
}
closedir($folder1);
rsort($afile);
$anz=count($afile);
for($i=$start;$i<$anz;$i++)
{
echo "<IMG SRC="$folder1/$afile[$i]">"
}

StefanGe
27.02.2003, 00:40:40
Hallo Matthias,

ich habe in der echo Zeile "$folder1" gegen "$folderA1" ausgetauscht und am Ende ein Semikolon eingefügt (ich hasse diese Semikolons. Stunden haben sie mich schon gekostet!) und jetzt geht es.

ABER: Er sortiert nicht. Oder nicht richtig.
Ich habe nun ein wenig mit der Zeile "rsort($afile);" gespielt und mal nur "sort($afile);" oder "asort($afile);" probiert - die Ergebnisse sind zwar jedesmal anders -, aber eben nicht sortiert: Statt 1-2-3 bekomme ich 3-2-1 Listings oder ganz durcheinander oder es ist zwar logisch aber nutzlos sortiert:
10-11-12-2-3-4-44-45.
Was ist der Kniff?
(Kann ich eigentlich Code auch mit den vB Befehlen formatieren? In meinem Profil stehen sie auf aus?)

Ben20
27.02.2003, 09:19:09
Du kannst noch rsort verwenden, dann soltest Du 3-2-1 Listings bekommen. natsort ist vielleicht auch ne Idee dann solltest Du 1 - 2 - 3 .. - 10 - 11 - 12 ... - 21 Listings bekommen!

Matthias
27.02.2003, 09:32:05
oh!!

hatte die Zeile bei dir oben Kopiert. ups. hätte wohl besser kucken sollen. sorry.

Bei mir im Script reicht ein rsort oder sort, aber Ben hat recht, für eine "natürliche Reihenfolge" solltest du natsort benutzen.

http://www.selfphp.info/funktionsreferenz/array_funktionen/natsort.php

StefanGe
27.02.2003, 11:31:04
Hi Ben und Matthias,

Danke für Eure Mühen. Leider sortiert auch natsort nicht so, wie in der Referenz beschrieben - das Ergebnis ist nach wie vor unsortiert:


$folder1 = opendir("$folderA1");
while($fA1=readdir($folder1))
{
if(!is_dir($fA1)) $afile[]=$fA1;
}
closedir($dir);
natsort($afile);
$anz=count($afile);
for($i=$start;$i<$anz;$i++)
{
echo "
<P><IMG SRC="$afile[$i]"></P>n
<P>$afile[$i]</P>n";
}


Das Ergebnis ist:
a2.gif, 12.gif, 11.gif, 1.gif, 4.gif, 2.gif, 5.gif, 6.gif, 7.gif, 8.gif, 9.gif, 10., gifa1.gif

Das kann doch nicht so schwer sein? Hab ich 'n Brett vorm Kopf?

StefanGe
01.03.2003, 13:45:30
Huhu!

Könntet Ihr Euch nochmal mein letztes Script anschauen? Ich bin leider noch zu keiner Lösung gekommen :-((((
Tausend Dank!

Ben20
01.03.2003, 14:05:39
Also in deinem Script kann ich keinen Fehler finden! Hast Du es mal mit rein numerischen Dateinamen versucht, also 1 statt 1.gif usw.

StefanGe
01.03.2003, 14:22:20
Hi Ben,

ich hab jetzt mal meine gifs umbenannt ("1" statt "1.gif").
Das Ergebnis:
1, 10, 2, 12, 3, 11, 5, 6, 7, 8, 9, a1, a2
An der Extension scheint es also nicht zu liegen ...

Alternativ habe ich die gifs einfach mal in "a", "b", "c" ohne Extension umbenannt. Das Ergebnis:

b, c, a, f, e, g, d, i, j, k, l, m, n

Strange, oder?

Ben20
01.03.2003, 15:10:29
Allerdings! Da weiß ich jetzt auch nicht woran es liegt!

StefanGe
01.03.2003, 16:27:33
Also, ich habe jetzt mal nur "sort" verwendet. Das klappt bisher am Besten. Leider wird dabei zwischen Gross- und Kleinschreibung unterschieden.
1, 2, 02, 3, ..., 9, 10, 11, ..., a, b, c, ..., A, B, C
natürlich ist das noch nicht wirklich brauchbar, aber zumindest ein erster Schritt.
Wenn man
for($i=$start;$i<$anz;$i++)
in
for($i=0;$i<$anz;$i++)
ändert, dann wird auch nicht mehr das "erste" Objekt "verschluckt".

Ich vermute, dass irgendein Konflikt zwischen dem sort-Befehl und der for-Schleife besteht. Könnte das sein? Kann da jemand was zu sagen?