filetype() innerhalb einer Klasse

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • filetype() innerhalb einer Klasse

    Nabend alle zusammen,

    Hab gerade ein kleines Problem, wo ich nicht nachvollziehen kann, warum dies zu diesem Fehler kommt.

    Ziel: Ich möchte eine File-Struktur per rekursion einlesen und in eine eigene Array-Struktur bringen. Das ansich ist auch nicht das Thema. In meiner Klasse habe ich eine setDir() Methode, in der wiederum eine weitere readDir(); Methode aufgerufen wird, die letztendlich auch die rekursion durchläuft und mir alles einlesen soll.
    Hier habe ich einfach mal den Code meiner beiden Methoden, damit Ihr sehen könnt, wie ich die Array-Struktur aufbauen möchte:

    PHP-Code:
        /* setDir */
        
    public function setDir$path$rec true )
        {
            if ( 
    file_exists$path ) )
            {
                
    $this->structure[0]["title"] = "ROOT";
                
    $this->structure[0]["open"] = true;
                
                
    $this->readDir$path );
                
    $this->structure[0]["childs"] = $this->readDir$path$rec );
            }
        }

        
    /* readDir */
        
    private function readDir$path$rec true )
        {
        
            
    $childs = array();
        
            
    $verz opendir $path );
            while ( 
    $file readdir$verz ) ) 
            {
                if ( 
    filetype$path.$file ) != ".." && filetype$path.$file ) != "." 
                {
                    
    $item = array();
                    
    $item["title"] = $file;
                    
                    if ( 
    filetype$path.$file ) == "dir" 
                    {
                        
    $item["open"] = true;
                        
    $item["childs"] = $this->readDir$path.$file );
                    }
                    
                    
    $childs[] = $item;
                }
            
            }
            
    closedir$verz );
            
            return 
    $childs;
            
        } 
    Soeben habe ich den Fehler in sofern eingrenzen können, dass er erst ab der 2ten Ebene auftritt. Also sobald er das erste mal in die Zeile...
    PHP-Code:
    $item["childs"][] = $this->readDir$path.$file ); 
    ...springt. Was gibts zu beachten, wenn ich sowas vor habe?
    Die reine Struktur, die mir mein Skript erzeugt, ist schon super so wie ich es haben will. Nur es kommt zu folgender Fehlermeldung bem Aufruf der filetype() Funktionen.

    PHP-Code:
    Warningfiletype() [function.filetype]: Lstat failed for ........ 
    Dank euch, Gruß Mario

  • #2
    Kontrolliere die Pfadangabe.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      PHP-Code:
      if ( filetype$path.$file ) != ".." && filetype$path.$file ) != "." 


      Aus dem Manual zu filetype():
      "Returns the type of the file. Possible values are fifo, char, dir, block, link, file, socket and unknown."

      Kommentar


      • #4
        filetype

        Hi,

        Danke für die Hinweise. Jetzt habe ich es mal etwas umgeschrieben.
        Jetzt kommt der Lstat Fehler erst wieder ab der nächsten Ebene.

        PHP-Code:
            /* readDir */
            
        private function readDir$path$rec true )
            {
            
                
        $childs = array();
            
                
        $verz opendir $path );
                while ( 
        $file readdir$verz ) ) 
                {
                    if ( 
        $file != ".." && $file != "." 
                    {
                        
        $item = array();
                        
        $item["title"] = $file;
                        
                        if ( 
        filetype$path.$file."/" ) == "dir" 
                        {
                            
        $item["open"] = true;
                            
        //$item["childs"] = $this->readDir( $path.$file."/" );
                        
        }
                        
                        
        $childs[] = $item;
                    }
                
                }
                
        closedir$verz );
                
                return 
        $childs;
                
            } 
        Kommentiere ich die Zeile ein, dann kommen die Fehler / Warnungen.

        Gruß Mario

        Kommentar


        • #5
          PHP-Code:
          if ( filetype$path.$file ) != ".." && filetype$path.$file ) != "." 
          Hinzu kommt, dass $path und $file zusammengeklebt niemals die Werte ".." oder "." haben können, wenn $path nicht leer ist. Den String $file zu prüfen, sollte vollkommen ausreichen.

          Und warum benutzt du filetype() statt einfach is_dir($file) zu nehmen?
          Zuletzt geändert von fireweasel; 25.10.2009, 18:00.
          Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

          Kommentar


          • #6
            filetype

            Bei . und .. prüfe ich nun nur noch mit $file. Soweit gehts.
            Aber bei if ( filetype( $path.$file."/" ) == "dir" ) "muss" ich mit $path.$file."/" prüfen, da sonst der Pfad nicht stimmt.

            Und wie gesagt... im root verzeichnis gehts noch. Sobald er in die Rek. springt, gehen die Meldungen los.

            Mario

            Kommentar


            • #7
              Offensichtlich hast du eine Problem mit Pfaden in deiner Rekursion. Auf Papier auf malen und ordentlich Debuggen dürfte helfen.


              Aber warum benutzt du nicht die eingebaute SPL Rekursion?

              z.B. so:
              PHP-Code:
              <?php
              error_reporting
              (-1); 
              ini_set('display_errors'TRUE);


              $such_in    '.';   // Verzeichnis, welches durchsucht werden soll


              // Rekursivgedöns
              $dir =  new RecursiveIteratorIterator(
                            new 
              RecursiveDirectoryIterator($such_in));
                            
              foreach(
              $dir as $datei)
              {
                echo 
              "Tiefe: ".$dir->getDepth().' ';
                echo 
              $datei->getPathname()."<br>";
              }
              Wir werden alle sterben

              Kommentar


              • #8
                RecursiveIteratorIterator

                Wo finde ich denn Infos zu diesen Klassen?
                Wenn ich nicht weiß, welche Methoden es dafür gibt, dann kann ich schlecht damit arbeiten
                Und ein print_r(); gibt mir bei versuchter Ausgabe des Objects $dir ( in deinem Beispiel ) leider auch keinerlei Klassenstruktur zurück.

                Wäre aber ansich schon geil, wenn ich das Dinge nutzen könnte, da die wohl auch sehr schnell ist.

                Gruß Mario

                Kommentar


                • #9
                  PHP: RecursiveIteratorIterator - Manual
                  PHP: RecursiveDirectoryIterator - Manual

                  Kommentar

                  Lädt...
                  X