Dateien eines Verzeichnisses in Array einlesen

gigalogisch

Mitglied
Hallo allerseits,

ich möchte einige Dateien, die in einem Verzeichnis liegen, in einen Array einlesen.
Wie mir scheint, ist das gar nicht möglich :confused:

Hier mein Code:
Code:
$i="0";
$handle=opendir ('./');
while (false !== ($file = readdir ($handle))) {
if ($file=='.')
{
$file ='';
}
if ($file=='..')
{
$file ='';
}
if ($file<>'')
{
$dateinamen[$i]="$file";
$i++;
}
}
closedir($handle);

echo "$dateinamen";

Gibts da einen Fehler, oder geht es nicht?

Vielen Dank

Willi ;)
 
Hallo,

probier mal folgendes:

PHP:
<?php 
$handle=opendir('.');
$i = 0;
while ($file = readdir ($handle)) { 
   if ($file != "." && $file != "..") { 
       $dateinamen[$i]=$file;
       $i++;
   } 
}
closedir($handle); 
?>

echo $dateinamen; dürfte eigentlich nichts besonderes ausgeben da man so kein Array ausgibt.
Mach einfach mal zum Testen
PHP:
echo $dateinamen[0];
Also als Gesamtcode:
PHP:
<?php 
$handle=opendir('.'); 
$i = 0; 
while ($file = readdir ($handle)) { 
   if ($file != "." && $file != "..") { 
       $dateinamen[$i]=$file; 
       $i++; 
   } 
} 
closedir($handle); 
echo $dateinamen[0]
?>
Das ganze gibt dir natürlich auch die Namen von evtl. vorhandenen Unterverzeichnissen mit aus - das könnte man aber über eine RegEx filtern.
 
Zuletzt bearbeitet:
So da bin ich nochmal!

Ich habe das mal schnell etwas modifiziert damit nur Dateien ausgelesen werden (zumindest die welche 2 oder 3 oder 4 Stellen in der Dateiendung haben - also z.b. *.ps oder *.php oder *.name)

Hier der Code:
PHP:
<?php 
$handle=opendir('.'); 
$i = 0; 
while ($file = readdir ($handle)) { 
   if ($file != "." && $file != "..") {    		
   		if( ereg('\...$', $file) || ereg('\....$', $file) || ereg('\....$', $file ))	{   		
       	 $dateinamen[$i]=$file; 
       	 $i++; 
       	}
   } 
} 
closedir($handle);
echo "<pre>";
print_r($dateinamen);
echo "</pre>";
?>
Das Ganze gibt dir jetzt alle Werte aus dem Array schön übersichtlich mit Indexnummer zurück.
Die $i kannst übrigends komplett weglassen (also 3x im Code) da das PHP automatisch so macht.
 
Zuletzt bearbeitet:
Hallo,

vielen Dank erstmal für die Antworten.
Ich habe mich im ersten Posting etwas undeutlich ausgedrückt - sorry

schlecht ist dieser Weg, den wir bis jetzt gegangen sind, auch nicht :)

Also etwas genauer: Ich möchte alle Dateien in einem Verzeichnis auslesen, und NICHT die Dateinamen ausgeben, sondern den Inhalt der Dateien.

Ich hab mir dann überlegt, dass ich es so mach: (Aber leider funktioniert es so nicht)

Code:
<?php
$handle=opendir('.'); //aktuelles Verzeichnis auslesen
$i = 0;
while ($file = readdir ($handle)) {
   if ($file != "." && $file != "..") {
       $dateinamen[$i]=$file;
       $i++;
   }
}
closedir($handle);

$arrayeintraege=count($dateinamen); //zählen, wie viele Einträge (bzw. Files) vorhanden sind.

$i="0";
while ($i < $arrayeintraege) {  //er soll immer den Array eins weiter zählen, bis alle Dateieinträge erreicht sind.
 readfile("$dateinamen [$i]");
 $i++;
}
?>

Dankeeeee

Willi
 
Hallo,

so jetzt wirds interessant.

Was sind denn das für Dateien - ist da PHP-Code drin welcher ausgeführt werden soll oder wie?
 
Hi,

ne - das sind einfach txt-Dateien, die einfach angezeigt werden sollen.

Ganz genau handelt es sich um eine Terminseite.
Durch ein "Verwaltungstool" wird für jeden neuen Termin eine neue Textdatei im Format "jj-mm-tt" also z. B. "05-09-07.txt" angelegt.
Im File sind die ganzen Daten zum Termin, inkl. HTML-Formatierung vorhanden (also <td>Uhrzeit</td><td>Terminbeschreibung</td>usw...)

Nun soll mit dem oben beschriebenen Code, alle DateiNAMEN ausgelesen werden (also 05-09-07.txt ...), dann mit sort(); sortiert werden, damit die Termine in der richtigen Reihenfolge sind und letztendlich die Datei "richtig" ausgelesen werden und angezeigt werden. Das ganze sollte halt mit einem Array funktionieren...

noch einmal ganz Herzlichen und lieben Dank

Willi
 
Hallo,

das wird auch funktionieren - nur was ist wenn du an dem Tag 2 Termine hast - wie werden die dann gespeichert.
Im endeffekt müsstes du dann die im Array- stehenden Dateinamen öffnen den Inhalt in eine Variable schreiben und dann mit echo ausgeben.
 
Hallo dwex,

2 Termine an einem Tag ist auch kein Problem, denn dann wird die Datei halt einfach nochmal geöffnet und der 2. Termin in die selbe Datei, unter den anderen geschrieben. (ok, u. U. stimmts dann mit der sortierung der Zeit nicht... Aber sooo genau muss es auch nicht sein)

>>Im endeffekt müsstes du dann die im Array- stehenden Dateinamen öffnen den Inhalt in eine Variable schreiben und dann mit echo ausgeben.

Mache ich denn das nicht mit folgendem Code, den ich vorher schon im Komplett-Code gezeigt habe?

$i="0";
while ($i < $arrayeintraege) { //er soll immer den Array eins weiter zählen, bis alle Dateieinträge erreicht sind.
readfile("$dateinamen [$i]");
$i++;
}

Und so gehts leider nicht.

danke

Willi
 
Hallo,

nichts leichter als das:

PHP:
<?php 
$handle=opendir('.'); 
$i = 0; 
while ($file = readdir ($handle)) { 
   if ($file != "." && $file != ".." && $file != "index.php") {             
           if( ereg('\...$', $file) || ereg('\....$', $file) || ereg('\....$', $file ))    {            
            $dateinamen[$i]=$file; 
            $i++; 
           } 
   } 
} 
closedir($handle); 

$anzahl = count($dateinamen);

for($a = 0; $a < $anzahl; $a++) {
     echo file_get_contents($dateinamen[$a]);
     echo $ausgabe."<br><br>";	
}

?>

Das sollte der ganze Code sein.

Zur Erklärung:
1. mit der ersten while-Schleife liest du alle Dateinamen in ein Array - ausser natürlich die z.B. index.php.
2. Im Array $dateinamen stehen jetzt alle diese Dateinamen.
3. Dann zählst du die Elemente im Array mit count()
4. Machen eine for-Schleife wie beschrieben und gibt die einzelnen Dateiinhalte aus.

Voila das wars.
Ganz einfach - gell :)

EDIT:
Bitte gewohne dir mal diese komische Schreibweise ab:
Statt:
PHP:
readfile("$dateinamen [$i]");
nimmst du:
PHP:
readfile($dateinamen [$i]);
Ich bin mir jetzt auf anhieb nicht mal sicher ob es mit deiner Schreibweise überhaupt funktionieren würde - kannst es ja mal probieren.
 
Zuletzt bearbeitet:
Zurück