phpbuddy.eu
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 08.03.2005, 23:04   #1
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User

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;
}

?>
__________________

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

Geändert von steffenk (08.03.2005 um 23:21 Uhr).
steffenk ist offline   Mit Zitat antworten
Linktipp

Alt 08.03.2005, 23:37   #2
TP-Moderator
 
Benutzerbild von Stuck Mojo
 
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
Stuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKE
Da sag ich doch mal Prost auf die meisten Entwicklungsumgebungen Die machen das meist automatisch

Gruss
Jan
Stuck Mojo ist offline   Mit Zitat antworten
Alt 09.03.2005, 00:16   #3
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
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
steffenk ist offline   Mit Zitat antworten
Alt 09.03.2005, 09:57   #4
DSB
TP-Veteran
 
Benutzerbild von DSB
 
Registriert seit: Mar 2005
Ort: Weyhe
DSB hilft, wo's gehtDSB hilft, wo's gehtDSB hilft, wo's gehtDSB hilft, wo's geht
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
DSB ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik > Traum-Scripts
Funktionslister Funktionslister
« Mailscript: automatisches beziehen der Empfängeradresse ! | Dateibasierendes GB mit vielen Features »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:13 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 RC7 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67