[PHP] Ordner+ unterordner auslesen

Bububoomt

ohne Vertrauen
ID: 10361
L
28 April 2006
19.666
769
Ich versuche gerade ein script zu progen mit dem ich einen Ordner und desen unterordner auslese.

mit hilfe von is_file() sollte ich ja testen können ob es sich um einen ordnerist oder eine datei, sofern es eine Datei ist soll die datei nach einem Schema umbenannt werden und wenn es ein ordner ist müßte eine rekursion erfolgen und der ordner ausgelesen werden...

komischer weise wird mir jedesmall ausgegeben das es eine datei ist. auch wenn ich !is_dir eingebe wird mir augegeben das es eine datei ist.



PHP:
$ordner='ordner';

function opd($ordner){

 $handle=opendir ($ordner);
 while (false !== ($file = readdir ($handle))) {

    if(!is_dir($file)){
    echo "Datei :$file<br>";
//Hier sollte die umbenennung erfolgen
  }

    else
    echo "Ordner: $file<br>";        
   //     opd($file);    //die Rekursion würde hier erfolgen.
}
closedir($handle); 

}

opd($ordner);

Ausgabe:
Ordner: .
Datei :..
Datei :a
Datei :b

aber a und b sind ordner und keine dateien.

was mache ich da falsch?
 
was mache ich da falsch?
Du gehst von einer Tatsache aus, die nicht stimmt ;)
Bei "..", "a" und "b" wird ja "Datei" ausgegeben, obwohl es Ordner sind. D.h. is_dir() liefert false zurück. Du denkst dir, dass das heißt, dass diese Namen zu Dateien gehören.

Falsch ;) is_dir() liefert false, weil die Dateinamen nicht gefunden wurden ;)
 
hmm und wieso liefert mir is_file immer true zurück???

Versteh ich net, was muß ich denn machen??
 
hmm und wieso liefert mir is_file immer true zurück???
Das könnte ich mir dann auch nicht erklären.

Probiers so:
PHP:
function opd($ordner)
{
  echo "Lese Verzeichnis $ordner...<br>";
  $handle=opendir($ordner);

  while(($file=readdir($handle))!==false)
  {
    $fullpath=$ordner."/".$file;
    if(!is_dir($fullpath))
    {
      echo "Datei: $fullpath<br>";
      //do_rename_stuff($fullpath);
    }
    else
    {
      echo "Ordner: $fullpath<br>";
      opd($fullpath); // Rekursion
      echo "---<br>";
    }
  }

  closedir($handle);
}

opd("/root");
Als Ausgabe müsste er dir rekursiv die komplette Verzeichnisstruktur innerhalb von /root ausgeben.
 
Super danke dir. Habe nur noch

PHP:
    if($file!=".." AND $file!="."){...
   }

eingefügt

und es geht.

PHP:
function opd($ordner)
{
  echo "Lese Verzeichnis $ordner...<br>";
  $handle=opendir($ordner);



  while(($file=readdir($handle))!==false)
  {

    if($file!=".." AND $file!="."){

        $fullpath=$ordner."/".$file;
        if(!is_dir($fullpath))
        {
          echo "Datei: $fullpath<br>";
          //do_rename_stuff($fullpath);
        }
        else
        {
          echo "Ordner: $fullpath<br>";
          opd($fullpath); // Rekursion
          echo "---<br>";
        }
      }
    }
  closedir($handle);
}

opd("/ordner");