PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP: Ordnerinhalt auslesen und in Array speichern



pazzi
22.12.2004, 11:58
Wie im Titel steht suche ich eine Möglichkeit den Inhalt eines Ordners, respektive die Dateinamen aller Dateien in diesem Ordner auszulesen und in einem Array zu speichern.

dead_orc
22.12.2004, 12:04
if($handle = @opendir('images'))
{
while($file = readdir($handle))
{
if($file != '.' AND $file != '..')
{
$files[] = $file;
sort($files);
}
}
}
Damit sollten im Array $files alle Dateinamen aus dem Ordner 'images' gespeichert sein!

Dingsi
22.12.2004, 13:55
Zwei kleine Verbesserungen: Es empfiehlt sich vorher noch $files als array() zu initialisieren um ein paar Fehler bei strenger Fehlersensibilität und Sicherheitslücken zu vermeiden. Außerdem muss man nicht bei jedem Schleifendurchlauf sort() machen. Es reicht auch einmal nach der Schleife. Im Endeffekt heißt das:
$files = array();
if($handle = @opendir('images'))
{
while($file = readdir($handle))
{
if($file != '.' AND $file != '..')
{
$files[] = $file;
sort($files);
}
}
sort($files);
}

pazzi
22.12.2004, 14:14
Soweit funktioniert die ganze Sache jetzt wunderbar, herzlichen Dank.
Allerdings habe ich doch noch eine Kleinigkeit, und zwar bekomme ich immer die Fehlermeldung:

Warning: main(home/news/): failed to open stream: No such file or directory in blabla/home/news.php on line 29

Warning: main(): Failed opening 'home/news/' for inclusion (include_path='.:') in blabla/home/news.php on line 29

Was mich an der Sache allerdings verwirrt ist, dass trotz Fehlermeldung die Dateinamen und das nachfolgende Einfügen alles reibungslos läuft.
Der gesamt Code sieht jetzt wie folgt aus:

$files = array();
if($handle = @opendir('home/news'))
{
while($file = readdir($handle))
{
if($file != '.' AND $file != '..')
{
$files[] = $file;
}
}
sort($files);
}

$anzahl = count($files);

if($anzahl > 11)
{
$zahl = $anzahl - 11;
}
else
{
$zahl = 0;
}

for($count = $anzahl; $count > $zahl; $count--)
{
include("home/news/$files[$count]");
} Wenn ihr gerade dabei seid, könnt ihr euch ja auch mal den das untere Zeug ansehen. Theoretisch sollte es bewirken, dass immer die letzten 10 Dateien eingefügt werden, da ich bisher aber noch keine Lust hatte entsprechend viele zu erstellen und noch mit dem Error zu kämpfen hatte ist es bisher noch nicht praktisch bewiesen.

Lucleonhart
22.12.2004, 14:49
Also die Error Meldungen sagen ja mal ganz direkt, das der Ordner "news" da nicht existiert!

dead_orc
22.12.2004, 14:49
Zu dem Error: Mir sieht es so aus, als sei die Datei news.php (also dieses Skript) schon im Ordner home. Da du den Pfad relativ zum aktuellen Verzeichnis angeben musst, solltest du evtl. das 'home/' weglassen (es sei denn, in dem Ordner mit dem Skript ist noch ein Unterordner 'home' mit dem Ordner news!)

pazzi
22.12.2004, 14:56
Wenn ich das home rausnehme funktioniert garnichts mehr, sprich ich erhalte überhaupt keine Ausgabe. Lasse ich es allerdings bei der Array-Erstellung drin erhalte ich sowohl Ausgabe als auch Fehlermeldung wieder, mit dem kleinen Unterschied, dass dieses Mal nicht "home/news/" da steht sondern "news/".

Damit ihr besser durch den Ordneraufbau durchblickt sag' ich mal, wie ich es gemacht habe.

Oberordner:
main.php
- Unterordner "home":
- news.php
- - Unterordner "news":
- - die einzelnen Dateien, die ins Array kommen.

Jetzt ist es so, dass die einzelnen Dateien zwar in die news.php eingefügt werden, allerdings wird die news.php nocheinmal in main.php eingefügt, deshalb hatte ich auch am anfang das "home/" immer dabei, weil man bei sowas afaik immer von der Datei ausgehen muss, in welcher am Ende alles eingefügt ist.

Nemo
22.12.2004, 15:12
Eigentlich sollte es nicht sein, aber eventuell hilft './home/news/' ?

pazzi
22.12.2004, 17:35
Ha, endlich hab' ich es geschafft. Der Fehler lag in dem Teil, wo ich es hinbiegen wollte, dass immer nur die letzten 10 Dateien ausgelesen werden. Ich hatte in meinem Gedankengang dafür und meiner Dateibenennung leider einen kleinen Denkunterschied, der die ganze Sache dann aber verhunzt hat. Es wurde als erstes immer eine Datei ausgelesen, die wirklich nicht da war und. Ich hab' den Code jetzt, nach Aufdeckung des Denkfehlers, dementsprechend verändert und siehe da jetzt funktioniert es wunderbar.

An dieser Stelle nochmal ein großes Danke an die eifrigen Helfer :D