andi_b: rekusion bricht ab

hallo,
leider funktioniert bei mir folgendes script nur deshalb nicht, weil php merkt, dass ich rekusiv aufrufe. kann man das umgehen?

//script:

$fileObject = & new FileFinder();
$fileArray = & $fileObject->getFiles($dir);

print_r($fileArray);

class FileFinder
{
  var $returnArray;
  var $root;

function FileFinder()
  {
    $this->returnArray = array();
  }

function & getFiles($dir)
  {
    echo '# '.$dir."\r\n";
    if(!$handle=opendir($dir))
    {
      die();
    }

while (false !== ($file = readdir($handle))) {
      if(is_file($file))
      {
        $this->returnArray[] = $file;
      }
      elseif (is_dir($file))
      {
        if(trim($file) != "." && trim($file) != "..")
        {
          $startDir = $dir.'\'.$file;
          $this->returnArray[] = $this->getFiles($startDir);
        }
      }
    }
    closedir($handle);
    return $this->returnArray;
  }
}

//ausgabe:

C:\eigene\ableton-source\php2html>rename2html.php . hh hh

C:\eigene\ableton-source\php2html

C:\eigene\ableton-source\php2html\a

Array
(
    [0] => Array
        (
            [0] => Array
 *RECURSION*
        )

[1] => create_html.bat
    [2] => hallo das ist aber auch ein mist.php.html
    [3] => rename2html.php
    [4] => sidebar_sites.txt
)

danke, andi

  1. hallo,
    leider funktioniert bei mir folgendes script nur deshalb nicht, weil php merkt, dass ich rekusiv aufrufe. kann man das umgehen?

    //script:

    $fileObject = & new FileFinder();
    $fileArray = & $fileObject->getFiles($dir);

    print_r($fileArray);

    class FileFinder
    {
      [...]

    Ich weiss nicht, ob es Sinn macht, hier das Ergrebnis als Referenz zurückzugeben? Versuchmal ohne.

    function & getFiles($dir)
      {
        [...]
        return $this->returnArray;
      }
    }

    »»[...]

    --
    Gruss Martin
    1. hi,

      Ich weiss nicht, ob es Sinn macht, hier das Ergrebnis als Referenz zurückzugeben? Versuchmal ohne.

      sehr dick, das war schonmal der fehler. jetzt habe ich aber leider noch ein kleines problem. der erzeugt mir am anfang des arrays zwei sinnlose felder (sieht aus, als ob es mit '.', '..' zu tun hat, obwohl ich das ausgenommen habe).

      herlichen dank, andi

      class FileFinder
      {
        var $returnArray;
        var $root;

      function FileFinder()
        {
          $this->returnArray = array();
        }

      function getFiles($dir)
        {
          global $silent;
          global $recursive;
          global $directoryDelimiter;

      if(!$silent)
          {
            echo $dir."\r\n";
          }
          if(!$handle=opendir($dir))
          {
            die();
          }

      while (false !== ($file = readdir($handle))) {
            if(is_file($file) && !is_dir($file) && (trim($file) != "." && trim($file) != ".."))
            {
              $this->returnArray[] = $file;
              echo '#  '.$dir.$directoryDelimiter.$file."\r\n";
              echo '## '.$file."\r\n";
            }
            elseif ($recursive === true && is_dir($dir.$directoryDelimiter.$file) && (trim($file) != "." && trim($file) != ".."))
            {
              $startDir = $dir.$directoryDelimiter.$file;
              $this->returnArray[] = $this->getFiles($startDir);
            }
          }
          closedir($handle);
          return $this->returnArray;
        }
      }

      // output:

      #  C:\eigene\ableton-source\php2html\create_html.bat

      create_html.bat

      #  C:\eigene\ableton-source\php2html\hallo das ist aber auch ein mist.php.html

      hallo das ist aber auch ein mist.php.html

      #  C:\eigene\ableton-source\php2html\rename2html.php

      rename2html.php

      #  C:\eigene\ableton-source\php2html\sidebar_sites.txt

      sidebar_sites.txt

      Array
      (
          [0] => Array
              (
              )

      [1] => Array
              (
                  [0] => Array
                      (
                      )

      )

      [2] => create_html.bat
          [3] => hallo das ist aber auch ein mist.php.html
          [4] => rename2html.php
          [5] => Array
              (
                  [0] => Array
                      (
                      )

      [1] => Array
                      (
                          [0] => Array
                              (
                              )

      )

      [2] => create_html.bat
                  [3] => hallo das ist aber auch ein mist.php.html
                  [4] => rename2html.php
              )

      [6] => sidebar_sites.txt
      )

      C:\eigene\ableton-source\php2html>

      1. sorry, sinnloser stress, hab den fehler. der objekt-array hat sich selbst überschrieben....

        andi