Ordner suchen

blubbbla

Erfahrenes Mitglied
Hallo,

ich habe eine Funktion, die mir einen bestimmten Pfad zu einem Ordner zurückgibt:

Code:
function returnUserDir($dir,$user_id) {
    function returnUserDir_recursive($dir,$user_id) {
         if (is_dir($dir)) {
              $dirhandle=opendir($dir);
              while (($file = readdir($dirhandle)) !== false) {
                    if (($file!=".")&&($file!="..")) {
                        $currentfile = $dir."/".$file;
                        $path_parts = pathinfo($currentfile);
                        if($path_parts['basename'] == strval($user_id))
                        {
                        	//trigger_error($currentfile);
                        	return $currentfile;
                        }else{
                        	if (is_dir($currentfile))
	                    		returnUserDir_recursive($currentfile,$user_id);
                        }

                    }
              }
         }
    }
   $d = returnUserDir_recursive($dir,$user_id);
   trigger_error("gefunden: ".$d);
   return $d;
}

Ich übergebe einen ordner, wo er rein gehen soll und eine Id, die dem Namen des gesuchten Ordners entspricht. Er geht jetzt rekursiv durch die Ordner und sucht. So in der If - Schleife ( if($path_parts['basename'] == strval($user_id))) findet er dann auch wirklich den Ordner und gibt den zurück. Allerdings steht dann bei trigger_error("gefunden: ".$d); einfach nichts drin. Warum? Eigentlich bricht er doch dann durch das return die Funktion ab und gibt den Ordne rzurück, aber irgendwie krieg ich immer nichts zurück :-(
 
Es gibt keinen Rückgabewert, da der Rückgabewert der rekursive Aufruf der returnUserDir_recursive()-Funktion nicht berücksichtigt wird.
Probier mal Folgendens:
PHP:
function returnUserDir( $dir, $user_id )
{
	if( !is_dir($dir) ) {
		return false;
	}
	if( !($dirhandle=opendir($dir)) ) {
		return false;
	}
	while( ($file = readdir($dirhandle)) !== false ) {
		if( $file=="." || $file==".." ) {
			continue;
		}
		$currentfile = $dir."/".$file;
		$path_parts = pathinfo($currentfile);
		if( is_dir($currentfile) && ($userDir = returnUserDir($currentfile,$user_id)) !== false ) {
			return $userDir;
		} else if( $path_parts['basename'] == $user_id ) {
			return $currentfile;
		}
	}
	return false;
}
 
Es war noch ein kleiner Fehler enthalten, da der Rückgabewert der rekursiv aufgerufenen Funktion nicht als Rückgabewert der aufrufenden Funktion verwendet wurde. Ist nun korrigiert.
 
Achso naja, ich hab dann einfach nochmal die User-Id hinten drangehängt, aber so ist es natürlich eleganter. Danke
 
Zurück