Seite 1 von 1
Problem mit is_dir
Verfasst: Do 19.Jul, 2007 11:54
von MADxHAWK
Hi zusammen,
habe mal wieder ein kleines problem

und hoffe ihr könnt mir helfen.
ich versuche den inhalt eine Verzeichnisses auszulesen, jedoch NUR die files, nicht die unterverzeichnisse. habe dafür folgenden code:
Code: Alles auswählen
$dir = opendir('/home/web1/html/');
while(false !== ($file = readdir($dir)) ) {
if($file == "." || $file == ".." ) {
continue;
}
if (!is_dir($file)){
$array[] = $file;
}
}
laut php.net gibt die funktion is_dir true zurück wenn $file ein verzeichniss ist, trotzdem enthält das array sowohl die unterverzeichnisse von $dir als auch die Dateine :s
hoffe jemand hat da einen tip für mich
Gruss
Martin
Verfasst: Do 19.Jul, 2007 12:41
von oxpus
Nein, es kommt ein boolean value zurück, also true oder false.
Die Unterverzeichnisse und Dateien kommen nie zurück.
Das wird nur mit readdir Zeile für Zeile, bzw. Dateieintrag für Dateieintrag aus dem angewählten Verzeichnis ausgelesen.
$dir ist dabei nie ein Array, sondern nur eine Ressource, die die Verbindungs-ID darstellt.
Soviel zum Inhalt!
Also, was tun?
Dein Script ist so erst einmal nicht falsch, aber es geht besser:
Code: Alles auswählen
@$dir = opendir('/home/web1/html/');
while (false !== ($file=@readdir($dir)))
{
if ($file{0} != "." && !is_dir($file))
{
$array[] = $file;
}
}
@closedir($dir);
Das erspart einige unnütze Berechnungen und Code. Zusätzlich wird die Performance damit gesteigert...
Verfasst: Do 19.Jul, 2007 16:54
von MADxHAWK
ahh, danke dir Oxpus, gleich mal testen
EDIT:
geht leider auch nicht. ich erhalte nach wie vor nicht nur die Dateien die sich in dem Verzeichnis befinden sondern auch die unterverzeichnisse
Greetz
Martin
Verfasst: Do 19.Jul, 2007 17:51
von oxpus
Dann mal statt
das versuchen:
Verfasst: Do 19.Jul, 2007 20:58
von MADxHAWK
Hi Oxpus,
nochmal danke geht aber leider auch nicht, ich hab fast das gefühl als ob die is_dir funktion buggy ist. ich hab noch verschiedene andere möglichkeiten getestet z.b. statt !is_dir die funktion is_file aber auch das brachte keine änderung. Entweder sind diese beiden funtionen buggy oder mein server kennzeichnet sowohl files als auch verzeichnise als dir.
nutze übrigens PHP Version 5.2.0-8 unter debian etch4
greetz
martin
Verfasst: Do 19.Jul, 2007 22:24
von AmigaLink
Code: Alles auswählen
@$dir = opendir('/home/web1/html/');
while (false !== ($file=@readdir($dir)))
{
if ($file != "." && $file != ".." && !is_dir($file))
{
$array[] = $file;
}
}
@closedir($dir);
Da du PHP5 nutz, kannst du das aber auch mittels glob() anstelle von readdir() machen:
Code: Alles auswählen
$dir_content = glob('/home/web1/html/');
foreach ($dir_content as $file)
{
if ($file != "." && $file != ".." && !is_dir($file))
{
$array[] = $file;
}
}
Das Kitzelt nochmal ein wenig Performance raus.

(Geht ab PHP 4.3.0.)
Verfasst: Fr 20.Jul, 2007 00:24
von oxpus
Nun ja, mein Code geht schon in der Regel mit der ersten oder zweiten Variante, hatte ich beide bereits im Download MOD eingebunden und mich dann für die erste entschieden.
Wenn das hier Probleme macht, ist an der PHP-Version was falsch.
PHP 5.2.0 sollte aber eh mal aktualisiert werden

Verfasst: So 22.Jul, 2007 01:59
von MADxHAWK
Hi, danke für die vorschläge, werde es mal testen.
greetz
MADxHAWK