Anzahl Dateien in Ordner ausgeben
Kati
- php
Hallo mit'nander!
Ich will aus einem Ordner die Anzahl Dateien auslesen:
$path="../example/";
$index=0;
$handle = opendir($path);
//Dateien aus Ordner in Array $file speichern
while($file = readdir($handle))
{
$files[] = $file;
$index++;
}
echo $index;
Aber irgendwie wird mir immer nur 0 ausgegeben.
Was mache ich falsch?
Danke schonmal im Vorraus
Hello,
Ich will aus einem Ordner die Anzahl Dateien auslesen:
$path="../example/";
$index=0;
$handle = opendir($path);
//Dateien aus Ordner in Array $file speichern
while($file = readdir($handle))
{
echo $file; ### gibt Dir Auskunft über Deinen einen Denkfehler
$files[] = $file;
$index++;}
echo $index;
Aber irgendwie wird mir immer nur 0 ausgegeben.
Was mache ich falsch?
Du versuchst Dateien zu sammeln, wo keine sind.
Der andere Fehler ist in der while-Bedingung
Wenn eine Datei des Namens '0' kommt, was nicht verboten ist unter Linux, dann ist die Schliefe zuende.
Du musst also fragen nach
(while (false !== ($file = readdir($diehandle)))
{
## es gibt eine Datei im Verzeichnis
## mit dem Namen $file, aber in welchem Pfad
## liegt die?
}
Und schau Dir auch mal glob() an
http://de2.php.net/manual/de/function.glob.php
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Du versuchst Dateien zu sammeln, wo keine sind.
Der andere Fehler ist in der while-Bedingung
Wenn eine Datei des Namens '0' kommt, was nicht verboten ist unter Linux, dann ist die Schliefe zuende.
Du musst also fragen nach
(while (false !== ($file = readdir($diehandle)))
{
## es gibt eine Datei im Verzeichnis
## mit dem Namen $file, aber in welchem Pfad
## liegt die?
}
»»
Danke! Ist ja eigentlich logisch ;)
öhm, wo soll ich jetzt aber Den Pfad an den Dateinamen anhängen?
nach dem öffnen des Ordners in einer Schleife?
(while (false !== ($path.$file = readdir($handle))
{ oder HIER?
}
Und schau Dir auch mal glob() an
machich mal, danke
Hello,
$dirhandle = opendir($path);
(while (false !== ($file = readdir($dirhandle)))
{
$foundfile = rtrim($path,'/').'/'.$file; ### [1]
if is_file($foundfile)
{
$_directory[] = $foundfile;
}
> }
echo "Anzahl = ".count($_directory);
[1] sonst hast Du auch die Links, die Directories und die beiden "Spezialeinträge" . und .. mit drin
Danke! Ist ja eigentlich logisch ;)
öhm, wo soll ich jetzt aber Den Pfad an den Dateinamen anhängen?nach dem öffnen des Ordners in einer Schleife?
(while (false !== ($path.$file = readdir($handle))
{ oder HIER?
siehe oben...
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hallo mit'nander!
Ich will aus einem Ordner die Anzahl Dateien auslesen:
...
Aber irgendwie wird mir immer nur 0 ausgegeben.
Was mache ich falsch?Danke schonmal im Vorraus
Hi,
in der php Dokumentation von readdir()
http://www.php.net/manual/de/function.readdir.php
findest du das Beispiel:
"Example#2 Listet alle Dateien des aktuellen Verzeichnisses
auf und blendet dabei . und .. aus."
In dem Beispiel werden alle Dateinachem mit echo ausgegeben. Füge
statt dessen deinen Zahler ein und es sollte laufen ....
Gruss
Hello,
in der php Dokumentation von readdir()
http://www.php.net/manual/de/function.readdir.php
findest du das Beispiel:
"Example#2 Listet alle Dateien des aktuellen Verzeichnisses
auf und blendet dabei . und .. aus."
Das listet alle Einträge mit Ausnahme der "Spezialeinträge" auf,
also auch Links, Directories und was es sonst noch geben könnte.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Hallo!
Ich hab am Prog weitergearbeitet. Aber es funktioniert immer noch nicht. Es wird nichts ausgegeben. Mir fallen bald die Augen aus dem Kopf.. kann sich das jemand mal anschaun?
<?php
$path=""
$erlaubte_endungen = array('jpg','jpeg','gif','png'); //Erlaubte Endungen
//Anzahl IMGDateien im Ordner $path
$index=0;
$files=array();
if( $handle = opendir($path))
{
while (false !== ($file = readdir($handle)))
{
if ($file != "." && $file != "..") //Auschliessen von Unterordner
{
$path_parts = $path.$file; //Ganze Pfad der Datei
if($path_parts["extension"] == $erlaubte_endungen) //Selektion: Nur bestimmte Dateieformate
{
$index++; //Zähler: wieviele Dateien hat es im Ordner?
$files[]=$file; //Array mit allen Dateien im Ordner
}
}
}
}
closedir($handle);
//Schliessen des Ordners
//Zufallszahl generieren
$zufall=rand(0, $index);
$file=$files[$zufall]; //Zufallsdatei
if(!file_exist($file)) //Wenn die Datei noch nicht existiert
{
##macht etwas
}
}
//Ausgabe der Datei
echo $file;
?>
Dankschön
Hello Kati,
<?php
#? kein Pfad angegeben?
$path="";
$erlaubte_endungen = array('jpg','jpeg','gif','png'); //Erlaubte Endungen
//Anzahl IMGDateien im Ordner $path
$index=0;
$files=array();
if( $handle = opendir($path))
{
while (false !== ($file = readdir($handle)))
{
if ($file != "." && $file != "..") //Auschliessen von Überordner und eigenem
{
$fullpath = rtrim($path,'/').'/'.$file; //Ganzer Pfad der Datei
$path_parts = pathinfo($file); ## Du willst doch nur die Extension
if(in_array(strtolower($path_parts["extension"]), $erlaubte_endungen))
{
$files[]=$fullpath; //Array mit allen Dateien im Ordner
}
}
}
closedir($handle); ## man kann nur ein Verzeichnis schließen, das
## erfolgreich geöffnet wurde
}
//Schliessen des Ordners
//Zufallszahl generieren
$zufall=rand(0, $count($files));
$file=$files[$zufall]; //Zufallsdateiif(!file_exist($file)) //Wenn die Datei noch nicht existiert
{
##macht etwas
}
else
{
//Ausgabe der Datei
echo $file;
}
?>
Du hast jetzt aber immer noch Links und Directories mit in Deiner Auswahl.
Die dürfen ja auch "erlaubte Endungen" im Namen haben.
Mit is_file() könntest Du die Auswahl auf Dateien beschränken.
Hatte ich Dir aber schon einmal geschreiben.
Warum nun $fullpath = rtrim($path,'/').'/'.$file; ?
Wenn die Variable $path keinen abschließenden Slash enthält, würde er nach Deiner Methode im Fullpath fehlen. Hat sie einen und man hängt prophilaktisch aber noch einen an, kann es später Probleme bei Umleitungen und Rewrite geben, solltest Du das mal einsetzen wollen.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom