verzeichnis durchsuchen..

chris_sit

Erfahrenes Mitglied
Hi leute,

hab mir ein paar zeilen code geschrieben, um ein verzeichnis mit all seinen unterverzeichnissen durchsuchen zu können.

Code:
<? 
$rep=opendir('.'); 

function finddir($pfad) { 
	while ($file = readdir($pfad)) { 
		if($file != '..' && $file !='.' && $file !=''){ 
			if (is_dir($file)){ 
				echo "&nbsp;&nbsp;&nbsp;&nbsp;"; 
				echo $file; 
				echo "<br>"; 
				finddir($rep.$file); 
			} 
		} 

	} 
	closedir($pfad); 
//	clearstatcache(); 
} 

finddir($rep); 
?>

er gibt mir die verzeichnisse aus, die sich im "hauptverzeichnis" $rep befinden, die darin enthaltenen behält er aber lieber für sich und belohnt mich mit dieser fehlermeldung:

Warning: readdir(): supplied argument is not a valid Directory resource in d:\projects\finddir.php on line 5
Warning: closedir(): supplied argument is not a valid Directory resource in d:\projects\finddir.php on line 16


ist sicher was ganz banales, leider komm ich selbst nicht drauf :(

schönen abend wünsch ich noch

-chris
 
Die Variable $pfad wird vermutlich einen String mit dem Verzeichnisnamen enthalten. Die Funktionen readdir und closedir erwarten aber ein Verzeichnishandle, und keinen String.
Wie die Fehlermeldung selbst schon sagt. ;)
 
die funktion bekommt doch im 1. durchlauf, doch auch nur einen string mit dem verzeichnisnamen ("." fürs aktuelle verzeichnis)... und der wird dann brav in der funktion weitergereicht.. hmpf :/
 
Nein, Du übergibst an die Funktion immer nur den Pfad, nicht das Verzeichnishandle. Ausserdem sprechen die Fehlermeldung und ich von den Funktionen readdir und closedir. Dass opendir einen String haben will, ist klar - aber daraus kriegt man ja das Verzeichnishandle zurück.
 
jetzt komm ich zwar langsam dahinter, was du mit dem handler meinst..

Code:
function finddir($rep) { 
	$pfad=opendir($rep); 
	while ($file = readdir($pfad)) { 
		if($file != '..' && $file !='.' && $file !=''){ 
			if (is_dir($file)){ 
				echo "&nbsp;&nbsp;&nbsp;&nbsp;"; 
				echo $file; 
				echo "<br>"; 
				//echo $rep."/".$file;
				finddir($rep."/".$file."/"); 
			} 
		} 

	} 
	closedir($pfad); 
	clearstatcache(); 
}

hab das jetzt auch mal angepasst, hoffe das stimmt jetzt so.. aber irgendwie will er trotzdem nicht.

er geht zwar in die verzeichnisse, gibt dort aber nur das letzte verzeichnis aus, nicht alle unterverzeichnisse.. hmpf :/
 
Versuch mal dieses Script und das nächste mal die Suche benutzen :)
Man muss das Rad nicht immer wieder neu erfinden.

PHP:
<?php
// starting directory
$basedir = ".";
// functions
function listdir($basedir,&$a_dir){
	if ($handle = @opendir($basedir)) {
		while (false !== ($dir = readdir($handle)))
		{
			if ($dir == '.' || $dir == '..'){
			} else {
				if (is_dir($basedir."/".$dir)){
					$a_dir[] = $basedir."/".$dir;
					listdir($basedir."/".$dir,$a_dir);
				}
			}
		}
		closedir($handle);
	}
	return $a_dir;
}
listdir($basedir,$a_dir);
print_r($a_dir);
?>
 
es funktioniert zumindest, thx =)

hatte suche schon montag benutzt, kam auf eine ähnliche lösung aber die lief nicht wie sie sollte.. welchen suchbegriff hast du verwendet, hatte "verzeichnisse" + "durchsuchen"


das
Code:
while (false !== ($dir = readdir($handle)))
würd mich aber auch interessiern ;)
 
Original geschrieben von Lirion
Sorry, aber...
PHP:
while (false !== ($dir = readdir($handle)))

...was ist das denn? :p


DAS ...

ist eine richtige Schreibweise und kein Quark...
Siehe PHP-Manual ...

@chris_sit
http://www.tutorials.de/forum/showthread.php?threadid=74200

Ich weiß es, weil ich das Problem selbst mal hatte und eine relativ gute Lösung gefunden habe, bzw. schon andere gesehen habe ;)

Beim Suchen muß man manchmal auf andere Begriffe zurückgreifen. Z. B. Verzeichnisse, Unterverzeichnisse, Rekursiv, usw.

Ich weiß, das es schwierig sein kann die richtigen Suchbegriffe zu finden, deshalb der Link :)
 
Zuletzt bearbeitet:
also nach einigem suchen habe ich den vergleichsoperator === gefunden, zu !== hab ich dann nach einigem suchen folgendes gefunden :D

-- $a !== $b
-- Nicht identisch
-- Gibt TRUE zurück, wenn $a nicht gleich $b ist, oder wenn beide nicht vom gleichen Typ sind (nur PHP 4).
 

Neue Beiträge

Zurück