dey: der Schrott muss weg

Hallo,

gibt es eine Software (möglichst freie Ware) mit der ich die Verzeichnisse in denen ich meine Web-Projekte habe dahingehend durchforsten kann was aktuell noch benutzt wird und was Leichen sind.
So a'la index-follow.

bydey

--
-- bydey ist die Signatur und Verabschiedung, nicht der Nick --
-- Navigate all your PHP web projects with  PHP Project Browser--
  1. Ich habe mir vor zwei Tagen ein kleines Script gebastelt, dass meinen kompletten htdocs-Ordner nach Projekten durchforstet und auflistet (sucht eigentlich nur nach den index.*-Dateien = Projekte). Leichen kann es zwar nicht anzeigen aber man hat eine schöne Übersicht in Form eines Verzeichnisbaums. Vielleicht bringt es dir ja was...

    P.S.:
    Ja ja, die Funktion "db_build_navigation" ist jenseits von Gut und Böse :-/ . Das ist eigentlich nicht mein normaler Stil. Sonst trenne ich brav Logik von Aussehen ;-)

      
    <?php  
    function db_get_pages($directory = '',$pages = array()) {  
     foreach(glob($directory . '*') as $file) {  
      if($file != $directory . '.' && $file != $directory . '..') {  
       if(is_dir($file) && (!file_exists($file . '/index.php') &&  
                            !file_exists($file . '/index.htm') &&  
                            !file_exists($file . '/index.html'))) {  
        $pages = db_get_pages($file . '/',$pages);  
       }  
       else if(file_exists($file . '/index.php') ||  
               file_exists($file . '/index.htm') ||  
               file_exists($file . '/index.html')) {  
        $pages[] = $file;  
       }  
      }  
     }  
     return $pages;  
    }  
      
    function db_navigation_add_folders($folders,$navigation) {  
     $struct = array();  
     for($i = 0;$i < count($folders);$i++) {  
      $struct[$folders[$i]] = array();  
     }  
     $name = array_keys($struct);  
     $path = array();  
     for($i = count($name) - 2;$i >= 0;$i--) {  
      $struct[$name[$i]] = array($name[$i + 1] => $struct[$name[$i + 1]]);  
      if($i == 0) {  
       $path[$name[0]] = $struct[$name[0]];  
       return array_merge_recursive($navigation,$path);  
      }  
     }  
    }  
      
    function db_create_navigation($directories) {  
     $navigation = array();  
     $split = array();  
     sort($directories);  
     for($i = 0;$i < count($directories);$i++) {  
      $path = explode('/',$directories[$i]);  
      $split[] = $path;  
     }  
     for($i = 0;$i < count($split);$i++) {  
      $navigation = db_navigation_add_folders($split[$i],$navigation);  
     }  
     return $navigation;  
    }  
      
    function db_build_navigation($navigation,$indent = 8,$path = '') {  
     if(count($navigation) > 0) {  
      $name = array_keys($navigation);  
      for($i = 0;$i < count($name);$i++) {  
       $directory = ($path != '')? $path . '/' . $name[$i] . '/': $name[$i];  
       $id = md5($directory);  
       if(count($navigation[$name[$i]]) > 0) {  
        echo str_repeat(' ',$indent) . '<div style="cursor:pointer;color:rgb(0,0,0)" onClick="if(document.getElementById(\'sf_' . $id . '\').style.display == \'none\') { document.getElementById(\'sf_' . $id . '\').style.display = \'block\'; } else { document.getElementById(\'sf_' . $id . '\').style.display = \'none\'; }" onMouseMove="this.style.color=\'rgb(0,0,200)\'" onMouseOut="this.style.color=\'rgb(0,0,0)\'">' . htmlentities($name[$i]) . '</div>' . "\n";  
        echo str_repeat(' ',$indent) . '<div id="sf_' . $id . '" style="padding-left:1.5em;display:none">' . "\n";  
        db_build_navigation($navigation[$name[$i]],$indent + 2,$directory);  
        echo str_repeat(' ',$indent) . '</div>' . "\n";  
       }  
       else {  
        echo str_repeat(' ',$indent) . '<a href="' . $directory . '"><i>' . htmlentities($name[$i]) . '</i></a><br>' . "\n";  
       }  
      }  
     }  
    }  
      
    if(!empty($_GET['show']) && $_GET['show'] == 'phpinfo') {  
     phpinfo();  
     exit;  
    }  
      
    ?>  
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
    <html>  
      <head>  
        <title>DirBrowser</title>  
        <style type="text/css">  
          <!--  
      a:link {  
       font-family: Verdana, Arial, Helvetica, sans-serif;  
       font-size: 11px;  
       text-decoration: none;  
       color: rgb(0,0,0);  
      }  
      a:visited {  
       font-family: Verdana, Arial, Helvetica, sans-serif;  
       font-size: 11px;  
       text-decoration: none;  
       color: rgb(0,0,0);  
      }  
      a:hover {  
       font-family: Verdana, Arial, Helvetica, sans-serif;  
       font-size: 11px;  
       text-decoration: none;  
       color: rgb(0,0,200);  
      }  
      a:active {  
       font-family: Verdana, Arial, Helvetica, sans-serif;  
       font-size: 11px;  
       text-decoration: none;  
       color: rgb(0,0,0);  
      }  
      a:focus {  
       font-family: Verdana, Arial, Helvetica, sans-serif;  
       font-size: 11px;  
       text-decoration: none;  
       color: rgb(0,0,200);  
      }  
      body {  
       background-color: rgb(255,255,255);  
      }  
      body, table {  
       font-family: Verdana, Arial, Helvetica, sans-serif;  
       font-size: 11px;  
       text-decoration: none;  
       color: rgb(0,0,0);  
      }  
      
      .content {  
       margin-left: auto;  
       margin-right: auto;  
       width: 30em;  
      }  
          -->  
        </style  
      </head>  
      <body>  
        <div class="content">  
          <span style="font-size:2.5em"><b>DirBrowser</b></span>  
          <br><br>  
          <b>Projekt&uuml;bersicht</b>  
          <div style="padding-left:0.5em">  
    <?php  
    $directories = db_get_pages();  
    $navigation = db_create_navigation($directories);  
    db_build_navigation($navigation);  
    ?>  
          </div>  
          <br><br>  
          <a href="index.php?show=phpinfo"><span style="color:gray">&uuml;ber PHP</span></a>  
          &nbsp;|&nbsp;  
          <span style="color:gray"><?php echo htmlentities(date('d.m.Y - H:i')) ?></span>  
        </div>  
      </body>  
    </html>  
    
    
    --
    Gruß, Daniel | In der Realität ist die Wirklichkeit ganz anders.
    1. Hallo,

      und was macht das Ding.
      Soll ja wohl alle Unterverzeichnisse rekursiv durchsuchen?
      Bei mir wird nur das Verzeichnis angezeigt in dem sich dein Script befindet.
      Ausserdem findest du etwas ähnliches wenn du mal meinem Link in der Signatur folgst.

      bydey

      --
      -- bydey ist die Signatur und Verabschiedung, nicht der Nick --
      -- Navigate all your PHP web projects with  PHP Project Browser--
      1. und was macht das Ding. Soll ja wohl alle Unterverzeichnisse rekursiv durchsuchen?

        Macht es auch - bei mir zumindest (das Script war nicht zur weitergabe gedacht ;-) ). Wenn er Ordner auflistet, kannst du mit der Maus da drauf klicken und wie in einem TreeView durch die Verzeichnisse wechseln.

        Bei mir wird nur das Verzeichnis angezeigt in dem sich dein Script befindet.

        Falls er Probleme beim Auslesen der Verzeichnisse hat, kannst du auch manuell einen Start-Pfad in dem ersten Parameter $directory der Funktion db_get_pages() eingeben (Funktion ist ganz oben im Script).

        Ausserdem findest du etwas ähnliches wenn du mal meinem Link in der Signatur folgst.

        Ich klick ja nicht auf jeden Link, den ich sehe ;-) Außerdem verstehe ich nicht so ganz, warum du ein anderes Programm suchst, wenn du es quasi schon hast. Ist ja alles ausbaufähig. Dein "PHP Project Nabigator" wirft bei mir Fehler in den Zeilen 66 und 62. array_merge bekommt falsche Parameter...

        --
        Gruß, Daniel | In der Realität ist die Wirklichkeit ganz anders.
        1. Hallo,

          Ich klick ja nicht auf jeden Link, den ich sehe ;-) Außerdem verstehe ich nicht so ganz, warum du ein anderes Programm suchst, wenn du es quasi schon hast. Ist ja alles ausbaufähig. Dein "PHP Project Nabigator" wirft bei mir Fehler in den Zeilen 66 und 62. array_merge bekommt falsche Parameter...

          Na eigentlich suche ich nicht etwas ausbaufähiges. Um das zu erreichen was ich will müsste ich alle Dateien öffnen und alle Links, includes und Verweise auf weitere Dateien herausholen, um danach die Dateien zu listen auf die es keine Verweise gibt.
          Technisch ist das schon machbar. Ich hatte aber tatsächlich eine Software zur Projektverwaltung gesucht.
          Wenn ich die nicht finde werde ich den  PHP Project Navigator aufbohren.

          Dass mein Script bei dir einen Fehler erzeugt wundert mich schon. Welches PHP benutzt du.
          Bei mir funktioniert es sowohl auf dem Server als auch hier lokal unter IIS

          Im umgekehrten Fall kann ich dein glob() nicht ausführen.

          bydey

          --
          -- bydey ist die Signatur und Verabschiedung, nicht der Nick --
          -- Navigate all your PHP web projects with  PHP Project Browser--
          1. Dass mein Script bei dir einen Fehler erzeugt wundert mich schon. Welches PHP benutzt du.
            Bei mir funktioniert es sowohl auf dem Server als auch hier lokal unter IIS

            PHP 5.0.4 auf einem etwas veralteten Apache 1.3 unter Mac OS X (10.3.9).

            Im umgekehrten Fall kann ich dein glob() nicht ausführen.

            Existiert die Funktion glob() nicht oder hat dein Server Probleme, nach "*" zu suchen?

            --
            Gruß, Daniel | In der Realität ist die Wirklichkeit ganz anders.
            1. Hallo,

              Existiert die Funktion glob() nicht oder hat dein Server Probleme, nach "*" zu suchen?

              Fehlermeldung bekomme ich keine.
              Ich sehe nur den Link bzgl. PHP info von dir.

              bydey

              --
              -- bydey ist die Signatur und Verabschiedung, nicht der Nick --
              -- Navigate all your PHP web projects with  PHP Project Browser--
              1. Fehlermeldung bekomme ich keine.
                Ich sehe nur den Link bzgl. PHP info von dir.

                Wie gesagt kann es sein, dass Windows Probleme mit dem Pfad hat. Gib mal bei $directory einen Slash ein...

                --
                Gruß, Daniel | In der Realität ist die Wirklichkeit ganz anders.
                1. Hallo,

                  Wie gesagt kann es sein, dass Windows Probleme mit dem Pfad hat. Gib mal bei $directory einen Slash ein...

                  Habe das bis jetzt auf 2 Windows und einem Linux probiert... erfolglos.

                  bydey

                  --
                  -- bydey ist die Signatur und Verabschiedung, nicht der Nick --
                  -- Navigate all your PHP web projects with  PHP Project Browser--
                2. Hallo,

                  Wie gesagt kann es sein, dass Windows Probleme mit dem Pfad hat. Gib mal bei $directory einen Slash ein...

                  <?php
                  foreach (glob("../*") as $filename) {
                     echo "$filename size " . filesize($filename) . "<br>\n";
                  }
                  echo "test<br>";

                  Aber deine Rekursivität schlägt seltsame Kapriolen.

                  bydey

                  --
                  -- bydey ist die Signatur und Verabschiedung, nicht der Nick --
                  -- Navigate all your PHP web projects with  PHP Project Browser--
                  1. Aber deine Rekursivität schlägt seltsame Kapriolen.

                    Und was genau? Den Pfad musst du in den Parameter $directory eingeben; ala

                    db_get_pages($directory = '../') {
                      ...
                    }

                    --
                    Gruß, Daniel | In der Realität ist die Wirklichkeit ganz anders.
                    1. Hallo,

                      Und was genau? Den Pfad musst du in den Parameter $directory eingeben; ala

                      db_get_pages($directory = '../') {
                        ...
                      }

                      Das funktioniert nicht.
                      Wenn ich diesen Weg gehe schlägt der Vergleich
                      is_dir($file) && (!file_exists($file . '/index.php')
                      immer fehl
                      Ich habe es mal so versucht:

                      function db_get_pages($directory = '/',$pages = array(),$wxp="..") {  
                       if (!isset($wxp)){$wxp="";}  
                       echo $wxp.$directory."<br>";  
                       foreach(glob($wxp.$directory . '*') as $file) {  
                        if($file != $directory . '.' && $file != $directory . '..') {  
                          echo $directory." -- ".$file."<br>";  
                         if(is_dir($file) && (!file_exists($file . '/index.php') &&  
                                              !file_exists($file . '/index.htm') &&  
                                              !file_exists($file . '/index.html'))) {  
                          $pages = db_get_pages($file . '/',$pages);  
                         }  
                         else if(file_exists($file . '/index.php') ||  
                                 file_exists($file . '/index.htm') ||  
                                 file_exists($file . '/index.html')) {  
                          $pages[] = $file;  
                         }  
                        }  
                       }  
                      
                      

                      Das Ergebnis ist wohl nicht wie gewünscht. Ausser dem Verzeichnis temp wird nix rekursiv durchsucht.

                      DirBrowser

                      Projektübersicht
                      ../
                      / -- /1 HTML Hilfe
                      / -- /Fuji
                      / -- /Grandprix
                      / -- /LimboCMS
                      / -- /ToendaCMS
                      / -- /ahzwei
                      / -- /asptest
                      / -- /bsv
                      / -- /div-tests
                      / -- /dream1
                      / -- /filemanager
                      / -- /fme_new
                      / -- /ftmed
                      / -- /games
                      / -- /guestphp
                      / -- /hp
                      / -- /index.php
                      / -- /minixml-1.3.0
                      / -- /myhp
                      / -- /pear
                      / -- /php-project-browser
                      / -- /phptest
                      / -- /programmingprojects
                      / -- /projekte.php
                      / -- /temp
                      ../temp/
                      /temp/ -- /temp/78143_75_Stück.txt
                      /temp/ -- /temp/78162_60_Stück.txt
                      /temp/ -- /temp/78332_30_Stück.txt
                      /temp/ -- /temp/79413_30_Stück.txt
                      /temp/ -- /temp/80141_200_Stück.txt
                      /temp/ -- /temp/80152_250_Stück.txt
                      /temp/ -- /temp/80491_20_Stück.txt
                      /temp/ -- /temp/81011_360_Stück.txt
                      /temp/ -- /temp/81431_40_Stück.txt
                      /temp/ -- /temp/81491_40_Stück.txt
                      /temp/ -- /temp/81962_24_Stück.txt
                      /temp/ -- /temp/82241_230_Stück.txt
                      /temp/ -- /temp/82261_1500_Stück.txt
                      /temp/ -- /temp/82722_100_Stück.txt
                      /temp/ -- /temp/83192_250_Stück.txt
                      /temp/ -- /temp/83212_15_Stück.txt
                      /temp/ -- /temp/83411_150_Stück.txt
                      /temp/ -- /temp/83563_5000_Stück.txt
                      /temp/ -- /temp/83671_96_Stück.txt
                      /temp/ -- /temp/83692_7500_Stück.txt
                      /temp/ -- /temp/84001_500_Stück.txt
                      /temp/ -- /temp/K004427_98_Stück.txt
                      /temp/ -- /temp/K004433_100_Stück.txt
                      /temp/ -- /temp/index.php

                      Array
                      (
                      )

                      / -- /w3cxslref
                      / -- /wm-tipp
                      / -- /xml brinkster

                      Array
                      (
                      )

                      Hast du eine Vorstellung warum?

                      bydey

                      --
                      -- bydey ist die Signatur und Verabschiedung, nicht der Nick --
                      -- Navigate all your PHP web projects with  PHP Project Browser--
                      1. Hast du eine Vorstellung warum?

                        Ja, ich denke schon. Mein Script rechnet damit, dass auf der obersten Ordner-Ebene, die es durchsucht, keine Projekte liegen. Mein Web-Sites-Ordner sieht zum Beispiel so aus:

                        htdocs
                          meinscript.php
                          Homepages
                            www.eineseite.de
                              index.php
                            www.nocheineseite.de
                              index.php
                          Tools
                            phpMyAdmin
                              index.php
                            roundcube
                              index.php

                        Jedes Projekt wird nach einem Thema sortiert. So landen die ganzen Homepages im Ordner Homepages, Tools landen im Ordner Tools und so weiter. Mein Script liegt auf der obersten Ebene und liest diese Ordner aus. Tiefer verschachtelte "Themen-Ordner" sind auch möglich. Nur die erste ebene muss frei von Projekten sein. Eine Ordner-Struktur wie deine kann es nicht auslesen:

                        htdocs
                          meinscript.php
                          deinprojekt
                            index.php
                          nocheinsdeinerprojekte
                            index.php

                        Würdest du stattdessen so eine Ordner-Struktur machen ...

                        htdocs
                          meinscript.php
                          Projekte
                            deinprojekt
                              index.php
                            nocheinsdeinerprojekte
                              index.php

                        ... sollte es klappen. Wenn ich nähmlich eine Ordner-Struktur wie deine mache, liest es auch nichts mehr aus. Mein Script geht halt von einem aufgeräumten htdocs-Order aus ;-) . So geordnet könntest du rein theoretisch den $directory-Parameter wieder auf '' (leer) setzen...

                        --
                        Gruß, Daniel | In der Realität ist die Wirklichkeit ganz anders.
                        1. Hallo,

                          danke für deine Bemühungen.

                          bydey

                          --
                          -- bydey ist die Signatur und Verabschiedung, nicht der Nick --
                          -- Navigate all your PHP web projects with  PHP Project Browser--
                          1. danke für deine Bemühungen.

                            Kein Problem. Funktioniert es denn jetzt?

                            --
                            Gruß, Daniel | In der Realität ist die Wirklichkeit ganz anders.
                            1. Hallo,

                              Kein Problem. Funktioniert es denn jetzt?

                              Nein!
                              Teile meiner Verzeichnisse sind so wie du beschrieben hast. Desweiteren habe ich weitere Verzeichnisse, die aussehen wie temp aber bicht rekursiv durchsucht werden.
                              Wichtiger war für mich, dass ich nach x Monaten glob() ans laufen gebracht habe.

                              bydey

                              --
                              -- bydey ist die Signatur und Verabschiedung, nicht der Nick --
                              -- Navigate all your PHP web projects with  PHP Project Browser--
                              1. Teile meiner Verzeichnisse sind so wie du beschrieben hast. Desweiteren habe ich weitere Verzeichnisse, die aussehen wie temp aber bicht rekursiv durchsucht werden.

                                Schön und Gut. Nur sobald ein Verzeichnis auftaucht, das auf der obersten Ebene liegt und direkt eine index.*-Datei enthält, listet dp_get_pages() nichts mehr auf, egal ob sich auf der obersten Ebene noch andere Ordner befinden, die nicht direkt eine index.*-Datei enthalten und eigentlich rekursiv durchsucht werden sollten. Du musst alle deine Projekte in einen Ordner schieben, der zusammen mit meinem Script auf einer Ebene liegt - dann sollte es klappen...

                                --
                                Gruß, Daniel | In der Realität ist die Wirklichkeit ganz anders.
    2. hi,

      Ich habe mir vor zwei Tagen ein kleines Script gebastelt, [..] hat eine schöne Übersicht in Form eines Verzeichnisbaums.

      Also auf eine XP Kiste nehm ich dafür das tree Kommando:
      tree /f

      Zeigt den Verzeichnisbaum und die Dateien.

      --roro

  2. Moin!

    gibt es eine Software (möglichst freie Ware) mit der ich die Verzeichnisse in denen ich meine Web-Projekte habe dahingehend durchforsten kann was aktuell noch benutzt wird und was Leichen sind.

    Wie soll das genau gehen? Die Seiten können ja von irgendwoher verlinkt sein, aber nicht intern bei dir. Wie willst du das gesamte Internet nach Links auf deine Seiten durchsuchen?

    Aber als Handreichung: Erstelle eine Liste aller Dateien in deinem Document-Root, und erstelle eine Liste aller im Access-Log gelisteten Dateien. Vergleiche beide Listen (je mehr Access-Log-Zeitraum du erfaßt, desto besser).

    Die Differenz zwischen Liste (Dateisystem) und Liste (Logfile) sind deine mutmaßlichen Leichen, deren Entfernung du gegebenenfalls in Erwägung ziehen könntest.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. Hallo,

      Moin!

      gibt es eine Software (möglichst freie Ware) mit der ich die Verzeichnisse in denen ich meine Web-Projekte habe dahingehend durchforsten kann was aktuell noch benutzt wird und was Leichen sind.

      Wie soll das genau gehen? Die Seiten können ja von irgendwoher verlinkt sein, aber nicht intern bei dir. Wie willst du das gesamte Internet nach Links auf deine Seiten durchsuchen?

      Den Lösungweg beschreibe ich hier, glaube ich.

      bydey

      --
      -- bydey ist die Signatur und Verabschiedung, nicht der Nick --
      -- Navigate all your PHP web projects with  PHP Project Browser--