rekusives durchsuchen aber wie?

nilius

Grünschnabel
ich habe hier mal eine funktion erstellt, die allerding nur die oberste ebene des ordners durchsucht, wie kann ich die erweitern, das auch alle unterordner im module ordner druchsucht werden....hat jemand eine idee....

Code:
if ( ! isset( $mod ) )
	$mod = "rss_info";

$basepath = "module";
$dp = opendir( $basepath );
if ( $dp ) {
	while ( $dir = readdir( $dp ) ) {
		if ( $dir == "." || $dir == ".." )
			continue;

		if ( file_exists( $basepath . "/" . $dir . "/" . $mod . ".php" ) ) {
			$inc = $basepath . "/" . $dir . "/" . $mod . ".php";
			break;
		} else if ( file_exists( $basepath . "/" . $dir . "/" . $mod . ".htm" ) ) {
			$inc = $basepath . "/" . $dir . "/" . $mod . ".htm";
			break;
		}
	}
	closedir( $dp );

	if ( isset( $inc ) )
		include $inc;
	else
		print "Dieses Seite existiert noch nicht.";
} else {
	print "Fehler beim lesen des Verzeichnis " . $basepath;
}
 
Hi und Wilkommen im Forum.

Zu Begin gleich mal ein Hinweis. Du hast die Netiguette akzeptiert. Daher bitte ich dich, dass du dich an diese hältst. (insbesondere Rechtschreibung.)

Zu deinem Problem.:
Habe deinen Code etwas umgeschrieben. Ob er so funktioniert, kann ich dir nicht sage, da ich ihn nicht getestet habe.
PHP:
<?
function scanDirs($basepath, $mod)
{
	$dp = opendir( $basepath );
	if ( $dp )
	{
		while ( $dir = readdir( $dp ) )
		{
			if ( $dir != "." && $dir != ".." && is_dir($basepath . "/" . $dir))
			{
				$path = $basepath . "/" . $dir;
				if ( file_exists( $path . "/" . $mod . ".php" ) )
				{
					return $path . "/" . $mod . ".php";
				}
				elseif ( file_exists( $path . "/" . $mod . ".htm" ) )
				{
					return $path . "/" . $mod . ".htm";
				}
				else
				{
					return scanDirs($path, $mod);
				}
				
			}
		}
		closedir( $dp );

	} else {
		return false;
	}
}

if ( ! isset( $mod ) )
	$mod = "rss_info";

$basepath = "module";


$inc = scanDirs($basepath, $mod);

echo $inc;

?>
 
sry, habe mich verschrieben (aber als anerkannter Legastheniker hoffe ich das man mir dies verzeihen mag, werde darauf achten)

Danke erstmal das dies so schnell ging. die function hat so erstmal keine Fehler, aber eine Frage noch, sollte man den $basepath = "module"; nicht der function mitteilen? denn nun findet er keine Seite mehr, gibt aber auch keine Fehlermeldung aus. habe die auch ausgelagert in die function_inc.php die zuvorgeladen wird...ich weiss es ist schlecht da Du den Rest nicht kennst...
 
Die Fehlermeldungen habe ich weggelassen. Könnte man aber leicht wieder einbauen.
PHP:
<?
function scanDirs($basepath, $mod)
{
	$dp = opendir( $basepath );
	if ( $dp )
	{
		while ( $dir = readdir( $dp ) )
		{
			if ( $dir != "." && $dir != ".." && is_dir($basepath . "/" . $dir))
			{
				$path = $basepath . "/" . $dir;
				if ( file_exists( $path . "/" . $mod . ".php" ) )
				{
					return $path . "/" . $mod . ".php";
				}
				elseif ( file_exists( $path . "/" . $mod . ".htm" ) )
				{
					return $path . "/" . $mod . ".htm";
				}
				else
				{
					return scanDirs($path, $mod);
				}
				
			}
		}
		closedir( $dp );
		
		return "E2";

	} else {
		return "E1";
	}
}

if ( ! isset( $mod ) )
	$mod = "rss_info";

$basepath = "module";


$inc = scanDirs($basepath, $mod);

switch($inc)
{
	case "E1":
     	print "Fehler beim lesen des Verzeichnis " . $basepath;
	    break;
	case "E2":
	    print "Dieses Seite existiert noch nicht.";
	    break;
	default:
	    print $inc;
	    break;
}
?>

Und der $basepath wird doch übergeben. Er wird einfach der Funktion beim Aufruf übergeben.
 
case "E2" gibt er zurueck, also Seite existiert noch nicht....kannst du damit etwas anfangen. kann es daran liegen das die Seite in der der Aufruf ist, im selben verzeichnis liegt (module)?
 
Den letzten Satz kapiere ich nicht ganz.
Aber was du noch probieren könntest, wäre den Pfad von Root Verzeichnises deines Spaces aus anzugeben.
 
ich habe Dir mal das ganze gezipt, vielleicht kannst du das lokal bei Dir testen, ich sehe nicht warum es nicht funktioniert. (ist nur ein test aufbau, wie er aber bei auch ist)
 

Anhänge

fanste, koenntest du Dir das Beispiel mal anschauen. Es ist sehr wichtig das ich das hinbekomme. oder vll kommt ja auch ein anderer auf die Loesung. thx
 
Zurück