Ankündigung

Einklappen
Keine Ankündigung bisher.

Verzeichnis auslesen

Einklappen

Neue Werbung 2019

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

  • Verzeichnis auslesen

    Diskussionsbeitrag zum Wiki Eintrag: Verzeichnis auslesen.

    Die Diskussionsplattform des PHP.de Wiki wurde ins Forum integriert. Durch Klicken des Buttons "Antwort" kannst du an diesem Thema teilnehmen.
    Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

  • #2
    Ich weiß, der Artikel befindet sich noch in der Entwicklung, aber mir fällt eine starke Inkonsequenz in der Klammersetzung auf.
    Laut Coding-Standard ist bei Funktionsaufrufen zwischen Funktionsname und öffnende Klammer kein Leerzeichen zu setzen.
    Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

    Kommentar


    • #3
      siehe Diskussion Coding-Standard
      [COLOR="#F5F5FF"]--[/COLOR]
      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
      [COLOR="#F5F5FF"]
      --[/COLOR]

      Kommentar


      • #4
        Es geht nicht nur um das Problem (wie schon geschrieben: ich finde, es sieht doof aus und macht den Code auf Dauer eher unübersichtlich). Du hast auch manchmal das Leerzeichen gesetzt und manchmal nicht.
        Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

        Kommentar


        • #5
          Das waren dann wohl die letzten Fragmente des PHP Manual Beispiels...
          Mal ehrlich, wenn Dich das so stört, nehme ich die LZ eben raus. Ich finds anders herum lesbaren...
          [COLOR="#F5F5FF"]--[/COLOR]
          [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
          [COLOR="#F5F5FF"]
          --[/COLOR]

          Kommentar


          • #6
            Deal!
            Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

            Kommentar


            • #7
              Hoffe ich habe alle erwischt. Man das fällt einem ehrlich schwer, nen komplett anderen St. einzuhalten.
              [COLOR="#F5F5FF"]--[/COLOR]
              [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
              [COLOR="#F5F5FF"]
              --[/COLOR]

              Kommentar


              • #8
                Glaube ich dir.
                Bist auf zwei Stellen, wo du array () geschrieben hast, hast du sie alle erwischt. array() ist zwar ein Sprachkonstrukt und keine Funktion, aber wir haben uns ja darauf geeinigt, dass das Leerzeichen nur bei Kontrollstrukturen eingesetzt wird.
                Ob du bei die noch die Klammern setzt, bleibt dir überlassen. Ich mache das immer der Einheitlichkeit halber, auch wenn es nicht nötig ist (ebenso bei $obj = new ABC();).
                Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

                Kommentar


                • #9
                  Ach so. Beim Array war ich mir nicht sicher. Und die () für die habe ich gerade entfernt Sprachkonstrukt und so...
                  [COLOR="#F5F5FF"]--[/COLOR]
                  [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                  [COLOR="#F5F5FF"]
                  --[/COLOR]

                  Kommentar


                  • #10
                    Nagut, so kann man es auch interpretieren. die() und exit() sind da aber auch wieder so zwei von der fiesen Spezies. So fordern sie keine Klammern, wenn man aber einen Text übergibt, tun sie das.
                    PHP-Code:
                    die 'Nix da!'
                    geht nicht.
                    Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

                    Kommentar


                    • #11
                      Nur mal so ein Vorschlag, überall sehe ich immer die Methoden via opendir() mit Verzeichnissen zu arbeiten, zusätzlich eine Funktion für Rekursion selbst zu schreiben etc.

                      Dabei bietet doch php schon seit einiger Zeit auch viel komfortablere und mächtigere Möglichkeiten mit Verzeichnissen und Dateistrukturen umzugehen ohne z.b. bei Rekursion sich seinen Code selbst schreiben zumüssen

                      Insbesondere die seit php5 vorhandenen Iteratoren der SPL (DirectoryIterator, RecursiveDirectoryIterator) z.b. in Kombination mit dem FilterIterator bieten die Möglichkeit solche Dinge viel einfacher zu handhaben wie ich finde.

                      Ich fände es schön wenn in der Wiki vielleicht auch die Möglichkeiten mit den Iteratoren erklärt oder zumindest mit ein paar Links aufs Manual erwähnt werden.

                      (Nein das ist keine Meldung meinerseits das zu übernehmen, nur ein Vorschlag )
                      [URL="http://www.robo47.net"]robo47.net[/URL] - Blog, Codeschnipsel und mehr
                      | :arrow: [URL="http://www.robo47.net/blog/192-Caching-Libraries-and-Opcode-Caches-in-php-An-Overview"]Caching-Klassen und Opcode Caches in php[/URL] | :arrow: [URL="http://www.robo47.net/components"]Robo47 Components - PHP Library extending Zend Framework[/URL]

                      Kommentar


                      • #12
                        Magst Du hier wenigstens einen Ansatz posten? Finde ich interessant. Der vorliegende Beitrag war eher eine spontane Reaktion auf einen aktuellen Thread von heute.

                        @Manko: Ach nein? Das überrascht mich allerdings. (das mit "geht nicht")
                        [COLOR="#F5F5FF"]--[/COLOR]
                        [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                        [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                        [COLOR="#F5F5FF"]
                        --[/COLOR]

                        Kommentar


                        • #13
                          @robo47: Bin auch dafür. Man kann den Artikel ja zweiteilen. Einmal die prozedurale Variante und einmal die objektorientierte.
                          Ich finde es übrigens auch genial, dass die SPL ab PHP 5.3 fester Bestandteil von PHP ist und sich nicht mehr deaktivieren lässt. So hat man wenigstens die Aussicht, sie in Software wirklich einsetzen zu können, ohne viele Kunden auszuschließen, da Systemadministratoren ja bekanntermaßen immer alles deaktivieren, was man nur deaktivieren kann.

                          @nikosch: geht wirklich nicht und mit exit() ist es dasselbe Desaster. Klammern kann man eigentlich nur bei include_(once), require(_once), print und echo komplett und unbedingt weglassen.
                          Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

                          Kommentar


                          • #14
                            Zitat von nikosch Beitrag anzeigen
                            Magst Du hier wenigstens einen Ansatz posten? Finde ich interessant. Der vorliegende Beitrag war eher eine spontane Reaktion auf einen aktuellen Thread von heute.
                            Naja, mal ein paar Beispiele, hatte irgendwie grad Lust dazu
                            (Ich bitte den Stil (Formatierung, Variablenbennungen, etc) zu entschuldingen, soll nur der Demonstration dienen, ist grad so in ein paar Minuten entstanden, kann man also definitiv auch besser/ordentlicher machen )

                            Dateien auflisten
                            PHP-Code:
                            <?php
                            // Dateien aus Verzeichnis auflisten
                            echo 'Dateien: <br />';
                            $iterator = new DirectoryIterator('./files');
                            foreach(
                            $iterator as $element) {
                                if (
                            $element->isFile()) {
                                    echo 
                            $element->getFilename() . '<br />';
                                }
                            }
                            ?>
                            Output:

                            Code:
                            Dateien:
                            TestFile8.jpg
                            TestFile6.txt
                            TestFile1.txt
                            TestFile5.jpg
                            TestFile2.txt
                            TestFile2.jpg
                            TestFile3.txt
                            TestFile4.jpg
                            TestFile4.txt
                            TestFile6.jpg
                            TestFile7.txt
                            TestFile9.txt
                            TestFile1.jpg
                            TestFile9.jpg
                            TestFile3.jpg
                            TestFile5.txt
                            TestFile7.jpg
                            TestFile8.txt
                            Verzeichnisse auflisten
                            PHP-Code:
                            <?php
                            // Verzeichnisse auflisten
                            $iterator = new DirectoryIterator('./files');
                            echo 
                            'Verzeichnisse: <br />';

                            foreach(
                            $iterator as $element) {
                                if (
                            $element->isDir()) {
                                    echo 
                            $element->getFilename() . '<br />';
                                }
                            }
                            ?>
                            Output:
                            Code:
                            Verzeichnisse:
                            ..
                            files1
                            files3
                            files2
                            .
                            Verzeichnissestruktur ausgeben (Rekursive Iteratoren)
                            PHP-Code:
                            <?php
                            echo 'Rekursive Verzeichnisse: <br />';
                            // Rekursiv Verzeichnisse aus Verzeichnis auflisten

                            $recursiveIterator = new RecursiveDirectoryIterator('./files');
                            $recursiverecursiveIterator = new RecursiveIteratorIterator($recursiveIterator,RecursiveIteratorIterator::SELF_FIRST);

                            foreach(
                            $recursiverecursiveIterator as $element) {
                                if (
                            $element->isDir()) {
                                    
                            $depth $recursiverecursiveIterator->getDepth();
                                    echo 
                            str_repeat('&nbsp;&nbsp;'$depth);
                                    echo 
                            $element->getFilename() . '<br />';
                                }
                            }
                            ?>
                            Output:
                            Code:
                            Rekursive Verzeichnisse:
                            files1
                            files3
                              files3.2
                              files3.1
                            files2
                              files2.2

                            Verzeichnissestruktur ausgeben mit Dateien (Rekursive Iteratoren)
                            PHP-Code:
                            <?php
                            $recursiveIterator 
                            = new RecursiveDirectoryIterator('./files');
                            $recursiverecursiveIterator = new RecursiveIteratorIterator($recursiveIterator,RecursiveIteratorIterator::SELF_FIRST);

                            echo 
                            'Rekursive Struktur mit Verzeichnissen und DateienVerzeichnisse: <br />';
                            // Verzeichnisse aus Verzeichnis auflisten
                            foreach($recursiverecursiveIterator as $element) {
                                if (
                            $element->isDir() || $element->isFile()) {
                                    
                            $depth $recursiverecursiveIterator->getDepth();
                                    echo 
                            str_repeat('&nbsp;&nbsp;'$depth);
                                    echo 
                            '[' strtoupper($element->getType()) . '] ';
                                    echo 
                            $element->getFilename() . '<br />';
                                }
                            }
                            ?>
                            Output:
                            Code:
                            Rekursive Struktur mit Verzeichnissen und Dateien:
                            [FILE] TestFile8.jpg
                            [FILE] TestFile6.txt
                            [FILE] TestFile1.txt
                            [DIR] files1
                              [FILE] TestFile1.1.txt
                              [FILE] TestFile1.2.txt
                            [FILE] TestFile5.jpg
                            [FILE] TestFile2.txt
                            [FILE] TestFile2.jpg
                            [DIR] files3
                              [FILE] TestFile1.txt
                              [DIR] files3.2
                                [FILE] TestFile3.2.2.txt
                                [FILE] TestFile3.2.1.txt
                              [DIR] files3.1
                              [FILE] TestFile1.jpg
                            [FILE] TestFile3.txt
                            [FILE] TestFile4.jpg
                            [DIR] files2
                              [FILE] TestFile2.1.txt
                              [DIR] files2.2
                                [FILE] TestFile2.2.1.txt
                                [FILE] TestFile2.2.2.txt
                              [FILE] TestFile2.2.txt
                            [FILE] TestFile4.txt
                            [FILE] TestFile6.jpg
                            [FILE] TestFile7.txt
                            [FILE] TestFile9.txt
                            [FILE] TestFile1.jpg
                            [FILE] TestFile9.jpg
                            [FILE] TestFile3.jpg
                            [FILE] TestFile5.txt
                            [FILE] TestFile7.jpg
                            [FILE] TestFile8.txt


                            Da die Iteratoren keinerlei Optionen zur Sortierung bieten, hier noch ein paar Beispiele wie man den output sortieren kann:

                            Sortierte Ausgabe eines Verzeichnisinhalts
                            PHP-Code:
                            <?php

                            $iterator 
                            = new DirectoryIterator('./files');
                            $data = new ArrayObject();
                            // erstellen eines ArrayObjects mit den SplFileInfo-Objekten
                            foreach($iterator as $value)
                            {
                                
                            $data[$iterator->getFilename()] = $iterator->getFileInfo();
                            }
                            // sortieren
                            $data->ksort();

                            // ausgeben
                            foreach($data as $key=> $value)
                            {
                                echo 
                            $value->getFilename() . ' (Size: ' $value->getSize() . ' ) ' '<br />';
                            }
                            ?>

                            Output:
                            Code:
                            . (Size: 4096 )
                            .. (Size: 4096 )
                            TestFile1.jpg (Size: 2 )
                            TestFile1.txt (Size: 2 )
                            TestFile2.jpg (Size: 2 )
                            TestFile2.txt (Size: 2 )
                            TestFile3.jpg (Size: 2 )
                            TestFile3.txt (Size: 2 )
                            TestFile4.jpg (Size: 2 )
                            TestFile4.txt (Size: 2 )
                            TestFile5.jpg (Size: 2 )
                            TestFile5.txt (Size: 2 )
                            TestFile6.jpg (Size: 2 )
                            TestFile6.txt (Size: 2 )
                            TestFile7.jpg (Size: 2 )
                            TestFile7.txt (Size: 2 )
                            TestFile8.jpg (Size: 2 )
                            TestFile8.txt (Size: 2 )
                            TestFile9.jpg (Size: 2 )
                            TestFile9.txt (Size: 2 )
                            files1 (Size: 4096 )
                            files2 (Size: 4096 )
                            files3 (Size: 4096 )
                            Sortierte Ausgabe eines Verzeichnisinhalts mit Dateien und Ordnern getrennt
                            PHP-Code:
                            <?php
                            // Ordner zuerst, dann Dateien
                            $iterator = new DirectoryIterator('./files');
                            $directorys = new ArrayObject();
                            $files = new ArrayObject();
                            // erstellen eines ArrayObjects mit den SplFileInfo-Objekten
                            foreach($iterator as $value)
                            {
                                if (
                            $value->isDir()) {
                                    
                            $directorys[$value->getFilename()] = $value->getFileInfo();
                                } elseif (
                            $value->isFile()) {
                                    
                            $files[$value->getFilename()] = $value->getFileInfo();
                                }
                            }
                            // Dateien und Ordner sortieren
                            $directorys->ksort();
                            $files->ksort();

                            // zusammenfügen (Verzeichnisse zuerst)
                            $data array_merge((array)$directorys, (array)$files);

                            // ausgeben
                            foreach($data as $key=> $value) {
                                echo 
                            '[' $value->getType() . '] '$value->getFilename() . ' (Size: ' $value->getSize() . ' ) ' '<br />';
                            }
                            Output:
                            Code:
                            [dir] . (Size: 4096 )
                            [dir] .. (Size: 4096 )
                            [dir] files1 (Size: 4096 )
                            [dir] files2 (Size: 4096 )
                            [dir] files3 (Size: 4096 )
                            [file] TestFile1.jpg (Size: 2 )
                            [file] TestFile1.txt (Size: 2 )
                            [file] TestFile2.jpg (Size: 2 )
                            [file] TestFile2.txt (Size: 2 )
                            [file] TestFile3.jpg (Size: 2 )
                            [file] TestFile3.txt (Size: 2 )
                            [file] TestFile4.jpg (Size: 2 )
                            [file] TestFile4.txt (Size: 2 )
                            [file] TestFile5.jpg (Size: 2 )
                            [file] TestFile5.txt (Size: 2 )
                            [file] TestFile6.jpg (Size: 2 )
                            [file] TestFile6.txt (Size: 2 )
                            [file] TestFile7.jpg (Size: 2 )
                            [file] TestFile7.txt (Size: 2 )
                            [file] TestFile8.jpg (Size: 2 )
                            [file] TestFile8.txt (Size: 2 )
                            [file] TestFile9.jpg (Size: 2 )
                            [file] TestFile9.txt (Size: 2 )
                            Und jetzt wollen wir ja auch noch filtern, in diesem Beispiel wollen wir nur
                            Dateien mit der Endung .txt (Lässt sich natürlich beliebig erweitern, Dateigröße
                            , Alter, Datum der letzten Bearbeitung oder sonstiges)
                            Dazu müssen wir einen eigenen FilterIterator auf Basis der abstrakten Klasse
                            FilterIterator basteln und dort die abstrakte methode accept() implementieren

                            PHP-Code:
                            <?php
                            /**
                             * Filter um aus einem DirectoryIterator nur die Elemente rauszufiltern,
                             * die die eine Datei sind mit der Endung .txt
                             */
                            class myTxtOnlyFilterIterator extends FilterIterator
                            {
                                public function 
                            accept()
                                {
                                    
                            $current $this->current();
                                    
                            // nur dateien sind erlaubt
                                    
                            if ($current->getType() !== 'file') {
                                        return 
                            false;
                                    }
                                    
                            $filename $current->getFilename();
                                    
                            $fileInfo pathinfo($filename);

                                    if (empty(
                            $fileInfo['extension'])) {
                                        
                            // wenn sie keine Endung hat
                                        
                            return false;
                                    } elseif (
                            strtolower($fileInfo['extension']) == 'txt') {
                                        
                            // wenn es txt ist
                                        
                            return true;
                                    } else {
                                        
                            // eine andere Endung
                                        
                            return false;
                                    }
                                }
                            }

                            $iterator = new myTxtOnlyFilterIterator(new DirectoryIterator('./files'));
                            $data = new ArrayObject();
                            // erstellen eines ArrayObjects mit den SplFileInfo-Objekten
                            foreach($iterator as $value) {
                                
                            $data[$iterator->getFilename()] = $iterator->getFileInfo();
                            }
                            // sortieren
                            $data->ksort();

                            // ausgeben
                            foreach($data as $key=> $value) {
                                echo 
                            $value->getFilename() . ' (Size: ' $value->getSize() . ' ) ' '<br />';
                            }
                            Output:
                            Code:
                            TestFile1.txt (Size: 2 )
                            TestFile2.txt (Size: 2 )
                            TestFile3.txt (Size: 2 )
                            TestFile4.txt (Size: 2 )
                            TestFile5.txt (Size: 2 )
                            TestFile6.txt (Size: 2 )
                            TestFile7.txt (Size: 2 )
                            TestFile8.txt (Size: 2 )
                            TestFile9.txt (Size: 2 )
                            Ach ja für jeden der sich für Iteratoren und allgemein für die SPL interessiert, kann ich empfehlen hier mal zu schauen:
                            http://www.php.net/~helly/php/ext/spl/main.html
                            auch wenn das von 2007 ist, findet man dort zu dem was die SPL aktuell bietet wie ich finde viel mehr und viel detailliertere Informationen als im php Manual.
                            [URL="http://www.robo47.net"]robo47.net[/URL] - Blog, Codeschnipsel und mehr
                            | :arrow: [URL="http://www.robo47.net/blog/192-Caching-Libraries-and-Opcode-Caches-in-php-An-Overview"]Caching-Klassen und Opcode Caches in php[/URL] | :arrow: [URL="http://www.robo47.net/components"]Robo47 Components - PHP Library extending Zend Framework[/URL]

                            Kommentar


                            • #15
                              Wußte nicht, das es direkt nen DirectoryIterator gibt. Sieht vielversprechend aus, danke für die Arbeit. Kommt auf jeden Fall mit rein, die Kombination aus beidem ist eigentlich genau das, was mir fürs Wiki vorschwebt.
                              [COLOR="#F5F5FF"]--[/COLOR]
                              [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                              [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                              [COLOR="#F5F5FF"]
                              --[/COLOR]

                              Kommentar

                              Lädt...
                              X