Ergebnis 1 bis 4 von 4

Thema: Funktionslister

  1. #1
    TP-Special Mod Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869

    Funktionslister

    Folgender kleiner Herlfer ist von DSB und mir geschrieben worden.

    Gerade wenn man grössere Projekte bearbeitet, viele Includedateien hat,
    verliert man schon mal leicht den Überblick.

    Das folgende Script untersucht ab dem vorgegebenen Verzeichnis alle Dateien und extrahiert die Funktionen mit Namen , Parametern, Datei und Zeilennummern.
    Es ist nicht umfassend, so kann man nicht die Ergebnisse sortieren, etc., aber man kann es leicht den eigenen Bedürfnissen anpassen.
    Auch ist es nicht perfekt - es kann noch nicht zwischen Javascript und PHP unterscheiden, aber als Orientierungshilfe setzt ich es häufig ein.
    Auch um fremde Projekte zu analysieren ist es sehr nützlich.

    Enthalten ist auch eine nützliche Array-Sortier-Routine. Sie ermöglicht die Sortierung eines beliebigen Arrays mit Angabe des Sortierfeldes.

    Viel Spass damit.


    Name: func.php
    PHP-Code:
    <?php
    $func_found
    =ARRAY(); // nimmt die gefunden Funktionen auf
    $class_found=ARRAY(); //nimmt die Klassen auf
    $startdir=(isset($_POST['startdir'])) ? $_POST['startdir'] : "";
    if(
    $startdir!="" && substr($startdir,-1)!="/"$startdir.="/";

    ?>
    <h2>PHP Projekt-Analyse</h2>
    <form action="func.php" method="post">
    Startverzeichnis: <input type="Text" name="startdir" value="<?php echo $startdir;?>">&nbsp;&nbsp;
    <input type="submit" name="submit" value=" Analyse Start ">
    </form><hr>

    <?php
    if(isset($_POST["submit"])) {
    if(
    $startdir=="") exit; 
    echo 
    "<h3>Analysiere Verzeichnis '$startdir'</h3>";

    GetDirArray($startdir); // holt alle Dateien in das Array $dir

    $summe_zeilen=0// enthält die Anzahl der Codezeilen
    $leerzeilen=0// enthält die Anzahl der Leer- und Kommentarzeilen

    // Ausgabe von $dir
    for($i=0;$i<count($dir);$i++) 
    {
        
    $teil=explode(".",$dir[$i]);
        
    $letzter=sizeof($teil);
        
    $endung=strtolower($teil[$letzter-1]);

        
    $durchsuchen=ARRAY('php','php3','php4','php5','html','htm','xml');

        if (
    in_array($endung,$durchsuchen))
        {
            
    get_functions($dir[$i]);
        }
    }
    $func_found=mu_sort($func_found,"aufruf");
    $anzahl=sizeof($func_found);

    // Ergebnisausgabe
    echo '<b><u>Analyse:</u></b><br>';
    echo 
    'Es wurden <b>'.number_format($summe_zeilen,0,",",".").'</b> Zeilen Code durchsucht.';
    echo 
    '<br>Es wurden <b>'.number_format($anzahl,0,",",".").'</b> Funktionen gefunden.<br><br>';
    echo 
    '<br><b>'.number_format($leerzeilen,0,",",".").'</b> Leerzeilen oder Kommentare wurden übersprungen ';

    echo 
    "<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"2\">";
    echo 
    "<tr><td><b>Nr.</b></td><td><b>Funktionsname</b></td><td><b>Parameter</b></td><td><b>Filename</b></td><td><b>Zeilennummer</b></td></tr>";

    for (
    $i=0;$i<$anzahl;$i++)
    {
            echo 
    "<tr";
            if (
    $i 2) echo " bgcolor=#dddddd";
            else echo 
    " bgcolor=white";
            echo 
    "><td>".($i+1)."</td><td>".$func_found[$i]['aufruf'];
            echo 
    "</td><td>".$func_found[$i]['parameter']."</td>";
            echo 
    "<td>".$func_found[$i]['file']."</td>";
            echo 
    "<td>".$func_found[$i]['zeile']."</td></tr>";
    }
    echo 
    "</table>";

    }


    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    function GetDirArray($sPath)
    {
        global 
    $dir// ARRAY $DIR MUSS GLOBAL SEIN
        
    $handle=opendir($sPath);
        while (
    $file readdir($handle))
        {
                
    $retVal[count($retVal)] = $file;
        }
        
    //Clean up and sort
        
    closedir($handle);
        
    sort($retVal);
        while (list(
    $key$val) = each($retVal))
        {
            if (
    $val != "." && $val != "..")
            {
                    
    $path str_replace("//","/",$sPath.$val);
                    
    $dir[] = $path// SPEICHERUNG IM ARRAY $DIR
                    
    if (is_dir($sPath.$val))
                    {
                        
    GetDirArray($sPath.$val."/");
                    }
            }
        }
    }

    function 
    get_functions($filename)
    {
        global 
    $func_found,$summe_zeilen,$leerzeilen,$startdir;
        
    $satz=@file($filename);
        
    $zeilen=sizeof($satz);

        for (
    $i=0;$i<$zeilen;$i++)
        {
            
    $satz[$i]=trim($satz[$i]);
            if ( (
    $satz[$i]>"") && (substr($satz[$i],0,1)!="#") )
            {
                
    $summe_zeilen++;
                
    $index=sizeof($func_found);
                if(
    strpos(strtolower($satz[$i]),"<script")) $js=true;
                if(
    strpos(strtolower($satz[$i]),"</script>")) $js=false;
                
                if (
    strtolower(substr($satz[$i],0,8))=="function")
                {
                    
                    
    $satz[$i]=substr($satz[$i],0,strrpos($satz[$i],")")+1);
                    
    $func_found[$index]['aufruf']=substr($satz[$i],8,strpos($satz[$i],"(")-8);
                    
    $func_found[$index]['parameter']=substr($satz[$i],strpos($satz[$i],"("));
                    
    str_replace(")","",$func_found[$index]['parameter']);
                    
    $func_found[$index]['file']=substr($filename,strlen($startdir));
                    
    $func_found[$index]['zeile']=$i+1;
                    
                                }
                if(
    strpos($satz[$i],"class=")) //Klassen sammeln
                
    {
                    
                }
            }
            else 
    $leerzeilen++;
        }
    }

    function 
    mu_sort ($array$key_sort
    {
        
    $key_sorta explode(","$key_sort); 
        
    $keys array_keys($array[0]);

        
    // sets the $key_sort vars to the first
        
    for($m=0$m count($key_sorta); $m++) { $nkeys[$m] = trim($key_sorta[$m]); }
        
    $n += count($key_sorta);    // counter used inside loop
        
        // this loop is used for gathering the rest of the 
        // key's up and putting them into the $nkeys array
        
    for($i=0$i count($keys); $i++)
        {
            
    // quick check to see if key is already used.
            
    if(!in_array($keys[$i], $key_sorta))
            {
                
    // set the key into $nkeys array
                 
    $nkeys[$n] = $keys[$i];
                 
    $n += "1"
            }
         }
         
    // this loop is used to group the first array [$array]
         // into it's usual clumps
        
    for($u=0;$u<count($array); $u++)
        {
            
    // set array into var, for easier access.
            
    $arr $array[$u];

            
    // this loop is used for setting all the new keys 
            // and values into the new order
            
    for ($s=0$s<count($nkeys); $s++)
            {
                
    // set key from $nkeys into $k to be passed into multidimensional array
                
    $k $nkeys[$s];

                
    // sets up new multidimensional array with new key ordering
                
    $output[$u][$k] = $array[$u][$k]; 
            }
        }
        
    // wenn die Sortierung nicht ab- sondern aufsteigend sein soll, muss sort() benutzt werden
        
    sort($output); // Sort=Aufsteigend -> oder rsort=absteigend
        
    return $output;
    }

    ?>
    Geändert von steffenk (08.03.2005 um 23:21 Uhr)

    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer

  2. #2
    TP-Specialist Avatar von Stuck Mojo
    Registriert seit
    Feb 2001
    Ort
    Helmstedt/Wolfsburg
    Beiträge
    4.108
    Da sag ich doch mal Prost auf die meisten Entwicklungsumgebungen Die machen das meist automatisch

    Gruss
    Jan

  3. #3
    TP-Special Mod Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    na wer es hat, der brauchts halt nicht
    jeder nimmt so seine Werkzeuge die er liebt
    probiers doch mal aus - und dann sag mir, welches Programm das so auflistet

    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer

  4. #4
    DSB
    DSB ist offline
    TP-Veteran Avatar von DSB
    Registriert seit
    Mar 2005
    Ort
    Weyhe
    Beiträge
    1.137
    Also ich nutze die Routine auch um mir eine schöne Funktionesreferenzliste auszudrucken. Wie häufig weiß man nicht mehr genau in welcher Reihenfolge die Parameter der Funktion angegeben werden musste. Da genügt ein Blick und alles ist klar. Und ich halte auch gern Papier in den Händen.

    Zitat Zitat von St@eff.en
    Enthalten ist auch eine nützliche Array-Sortier-Routine. Sie ermöglicht die Sortierung eines beliebigen Arrays mit Angabe des Sortierfeldes.
    Kleiner Nachtrag: man kann auch mehrere Keys als Suchkriterium nacheinander benutzen (wie bei MySQl ORDER BY). Die Schlüssel werden einfach durch Komma getrennt.
    Gruß, DSB
    Einfaches Backup/ Restore Deiner MySQl-Datenbank
    Zend Certified Engineer PHP5

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51