funktioniert schon fast ....

Tob

Erfahrenes Mitglied
Hi leute,
ich habe ein Script geschrieben, das einen Ordner (und seine Unterordner) nach der Datei durchsuchen soll, die zuletzt geändert wurde.
Das problem ist nun, das sich das script nur eine Ebene weiter vor kämpft.
Bespiel: Ausgangsordner ist "c:/apache/htdocs/pfadihpserver" dann kommt es zwar nach "c:/apache/htdocs/pfadihpserver/admin" aber nicht mehr nach "c:/apache/htdocs/pfadihpserver/admin/feilchen" irgendwie scheint es daran zu liegen, dass er den ordner feilchen nicht als ordner betrachten sonder als datei... und ich hab keine Ahnung warum...
Hier ist mal das Script:
PHP:
<?
$var1[zeit]=0;
$dir = "c:/apache/htdocs/pfadihpserver";
$lastModification = lastmodification($dir);

echo $lastModification[zeit];
echo $lastModification[datei];

function lastmodification($verzeichniss){
    $dir = opendir($verzeichniss);
         while ($datei = readdir($dir)){
             if(is_dir($datei)){
                 if($datei != "." && $datei != ".."){
                    $datei = $verzeichniss."/".$datei."";
                    echo "<b>".$datei.":</b><br>";
                   lastmodification($datei);
                 }
             }
             else{
                  echo "&nbsp;&nbsp;&nbsp;-".$datei."<br>";
                  $stamp = filemtime($datei);
                  if ($stamp > $var1[zeit]){
                      $var1[zeit] = $stamp;
                      $var1[datei] = $datei;
                  }
             }
         }
         return $var1;
         }
?>

tob
 
das problem liegt in deinem is_dir:

PHP:
if(is_dir($datei)){
                 if($datei != "." && $datei != ".."){
                    $datei = $verzeichniss."/".$datei."";
                    echo "<b>".$datei.":</b><br>";
                   lastmodification($datei);
                 }
             }

nur, wenn das verzeichniss . oder .. heisst machst du einen rekursiven aufruf, du willst den aber bei jedem verzeichniss haben!
 
hä,
ich hab da doch extra !=

if($datei != "." && $datei != "..")

der muss die beiden verzeichnisse weglassen sonst dreht sich das script logischerweise im Kreis...

tob
 
aehm, ja richtig, sorry ... hatte das nur schnell ueberflogen ... schau mir das nachher nochmal an
 
bin gerade zu faul deine funktion ordentlich durchzugucken, auf jeden fall kann er bei dir nicht tiefer "crawlen" weil du ihm nie den kompletten pfad uebergibst, das script starten ja aus deinem "crawl-root" und den kompletten pfad von dort aus musst du immer mit uebergeben, wenn du tiefer gehen willst.

nimm sonst meine version, funktioniert perfekt ;)

PHP:
function crawlDir($DIRSRC)
{
	$DIR = dir($DIRSRC); 
	while($FILE = $DIR->read())
	{ 
		if (is_file($DIRSRC.$FILE))
		{
			//perform file check blahblah ...
			echo $DIRSRC.$FILE."<br>";
		}
		elseif (is_dir($DIRSRC.$FILE) && $FILE!="." && $FILE!="..")
		{
			crawlDir($DIRSRC.$FILE."/");
		}
	} 
	$DIR->close();
return true;
}

crawlDir("./");

dort kannst du dann recht schnell deinen timestamp-check einbauen.
 
ich verstehe nicht was du meinst. ich übergebe ihm doch sogar den absoluten pfad:
PHP:
<?
$var1[zeit]=0;
$dir = "c:/apache/htdocs/pfadihpserver"; //<< hier der ausgangspfad
$lastModification = lastmodification($dir);

echo $lastModification[zeit];
echo $lastModification[datei];

function lastmodification($verzeichniss){
    $dir = opendir($verzeichniss);
         while ($datei = readdir($dir)){
             if(is_dir($datei)){
                 if($datei != "." && $datei != ".."){
                    $datei = $verzeichniss."/".$datei.""; // << und hier wird der nächst höhere ordner angehängt.
                    echo "<b>".$datei.":</b><br>";
                   lastmodification($datei); // und an die Funktion übergeben
                 }
             }
             else{
                  echo "&nbsp;&nbsp;&nbsp;-".$datei."<br>";
                  $stamp = filemtime($datei);
                  if ($stamp > $var1[zeit]){
                      $var1[zeit] = $stamp;
                      $var1[datei] = $datei;
                  }
             }
         }
         return $var1;
         }
?>
aber ich schau mir deine Funktion mal an... vieleicht fällt dir ja auch noch was zu meiner ein ...

tob
 
das klappt aber bei dir nicht so ganz, lass dir doch am besten mal alles mit ausgeben oder probiers mal mit einem / am ende:

PHP:
$datei = $verzeichniss."/".$datei."/";
 
so mein script funzt jetzt *freu*
aber leider bekomme ich immer wenn ich im obersten verzeichniss beginne zu scannen die Fehlermeldung: OpenDir: Permission denied (errno 13) in /www/htdocs/pfadfide/lastmodify.php on line 12

was nun ?

tob
 
Zurück