Problem mit is_dir

PHP, Ajax, CSS, HTML, Javascript
Eben für die wirklich Harten, die alles selber machen.
Antworten
MADxHAWK
Beiträge: 132
Registriert: Mi 15.Nov, 2006 13:40
Wohnort: Bonn
Kontaktdaten:

Problem mit is_dir

Beitrag 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
Zuletzt geändert von MADxHAWK am Do 19.Jul, 2007 11:54, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag 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...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
MADxHAWK
Beiträge: 132
Registriert: Mi 15.Nov, 2006 13:40
Wohnort: Bonn
Kontaktdaten:

Beitrag 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
Zuletzt geändert von MADxHAWK am Do 19.Jul, 2007 17:15, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Dann mal statt

Code: Alles auswählen

if ($file{0} != "." && !is_dir($file))
das versuchen:

Code: Alles auswählen

if ($file{0} != "." && (is_dir($file) !== false))
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
MADxHAWK
Beiträge: 132
Registriert: Mi 15.Nov, 2006 13:40
Wohnort: Bonn
Kontaktdaten:

Beitrag 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
Benutzeravatar
AmigaLink
Beiträge: 5843
Registriert: Mi 03.Mär, 2004 09:05
Wohnort: NRW
Kontaktdaten:

Beitrag 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. :D
(Geht ab PHP 4.3.0.)
[center].: Web Relax .::. Essen mit Freude .::. AmigaLink.de :.
______________________________________

Kein Support per PM, ICQ oder eMail!!!
[/center]
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag 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 ;)
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
MADxHAWK
Beiträge: 132
Registriert: Mi 15.Nov, 2006 13:40
Wohnort: Bonn
Kontaktdaten:

Beitrag von MADxHAWK »

Hi, danke für die vorschläge, werde es mal testen.

greetz

MADxHAWK
Antworten