Funktionssucher

Was ist das ?

Als Chaot mit einigen umfangreichen, aber schlecht dokumentierten PHP-Seiten habe ich mir eine Suchmaschine gebaut, um eigene Funktionen wieder zu finden. Es ist einzig zu diesem Zweck gebaut. 
Mag ja sein! Aber selbst so ein Erleuchteter Guru hat irgendwann mal angefangen und wird dieses Tool daher mal zum scannen seiner alten Spripte benötigen.
Ausserdem bin ich mit dieser Suche manchmal schneller als ich es mit blättern in einer DoKu wäre ;-)

"Darf ich es umbauen, anpassen, verändern...?"

Wer den Befehl "grep" nicht kennt, sollte besser keine Umbauten vornehmen.
Aber selbstverständlich ist die Modifikation dieses Scriptes auf euren eigenen Servern uneingeschränkt, auf euer eigenes Risiko gestattet.

"Darf ich es kommerziell vermarkten?"

Gegenfrage: Was ist der Sinn von Freeware....? 
 

"Wie benutze ich es?"

Text unten, ohne die Zeilennummern kopieren und als PHP-Datei abspeichern... Dann starten.
Aber wenn diese Frage wirklich ernst gemeint war, ist es wohl noch ein bisschen zu früh, um nach eigenen Funktionen zu suchen.
Tipp:... In Zeile 003 kann man einen Pfad eingeben. Das Tool sucht dann nur innerhalb des angegebenen Pfades.

"Warum ist es Freeware?"

Hmmm.... Niemand würde so ein relativ kleines, sehr stark zweckgebundenes Script kaufen, sondern halt einfach etwas mehr Zeit ins Suchen investieren.
Ich nutze es für den Eigenbedarf und finde, es soll also auch Anderen von Nutzen sein.
Aus dem Grund habe ich es schon mal in einem anderen Forum gepostet und somit freigegeben.

___________________________________________

Hinweis:
- Nicht auf Windows-Servern lauffähig.
 

Viel Spass!

   
___________________________________________

SCHEIBEN DESIGN

001 
002 
003 
004 
005 
006 
007 
008 
009 
010 
011 
012 
013 
014 
015 
016 
017 
018 
019 
020 
021 
022 
023 
024 
025 
026 
027 
028 
029 
030 
031 
032 
033 
034 
035 
036 
037 
038 
039 
040 
041 
042 
043 
044 
045 
046 
047 
048 
049 
050 
051 
052 
053 
054 
055 
056 
057 
058 
059 
060 
061 
062 
063 
064 
065 
066 
067 
068 
069 
070 
071 
072 
073 
074 
075 
076 
077 
078 
079 
080 
081 
082 
083 
084 
085 
086 
087 
088 
089 
090 
091 
092 
093 
094 
095 
096 
097 
098 
099 
100 
101 
102 
103 
104 
105 
106 
107 
108 
109 
110 
111 
112 
113 
114 
115 
116 
117 
118 
119 
120 
121 
122 
123 
124 
125 
126 
127 
128 
129 
130 
131 
132 
133 
134 
135 
136 
137 
138 
139 
140 
141 
142 
143 
144 
145 
146 
147 
148 
149 
150 
151 
152 
153 
154 
155 
156 
157 
158 
159 
160 
161 
162 
163 

  <?php 
// Wenn nur ab einem bestimmten Pfad gesucht werden darf, hier etwas
eingeben, sonst leer lasen
define ('DEFAULTPFAD','');
?>
<html>
<head>
<meta http-equiv="Content-Language" content="de-ch">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<META NAME="ROBOTS"       CONTENT="noindex,nofollow">
<META NAME="GOOGLEBOT"    CONTENT="NOSNIPPET">
<META NAME="GOOGLEBOT"    CONTENT="NOARCHIVE">
<meta http-EQUIV="pragma" CONTENT="no-cache">
<meta http-EQUIV="pragma" CONTENT="private">
<title>Funktions-Sucher</title>
<style type="text/css">
<!--
BODY, td, tr
{   FONT-SIZE: 12px;
    FONT-FAMILY: Arial, Helvetia, sans-serif;
    color: #000080}

.copyright
{    font-size: 9px;
    font-weight: normal;
    color: #CCCCCC;}

.fehler
{   font-weight: bold;
    color: #FF0000;}

-->
</style>
</head>
<body>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF'?>">
  <h2>Bitte Suchbegriff eingeben</h2>
  <p>Kleines Tool, um schlecht dokumentierte, selber erstellte Funktionen wiederzufinden ;-) </p>
  <ul>
    <li> Erwartet als Eingabe den Namen der gesuchten Funktion.</li>
    <li> Gibt im Erfolgsfall eine Array mit dem Pfad, Zeilennummer und  Vorschau zur&uuml;ck. </li>
  </ul>
  <table width="465" height="86" border="0">
    <tr bgcolor="#FFFFCC">
      <td width="175" valign="bottom"><div align="right">Suchbegriff:</div></td>
      <td width="280" valign="bottom"><input type="text" name="Suchbegriff" size="20" value="<?php echo $_POST['Suchbegriff'?>"></td>
    </tr>
    <tr bgcolor="#FFFFCC">
      <td valign="bottom"><div align="right">zu durchsuchender Pfad:<br><b><?php echo $_SERVER['HTTP_HOST'].'/' DEFAULTPFAD ?></b></div></td>
      <td valign="bottom"><input type="text" name="StartPfad" size="40" value="<?php echo $_POST['StartPfad'?>"></td>
    </tr>
  </table>
  <p>    <br>
    <input type="submit" value="Abschicken" name="GO">
  </p>
</form>
<?php

ini_set
('display_errors'1); // Fehler anzeigen (1): gültig bis zum Ende des Skripts


// REGEXP um Feldwerte zu prüfen.
// ------------------------------
// Ein Feldname darf nicht mit einer Zahl anfangen, und erlaubt nur bestimmte Zeichen,
// mindestens 1 Zeichen muss vorhanden sein.
// (Dieser Schutz wird vor dem "grep" aufruf verwendet.)
   
define ('REGEXP_FELDNAME_CHECK','#^[a-zA-Z_\x7f-\xff]{1}[a-zA-Z0-9_\x7f-\xff]*$#');

 

    if (
trim($_POST['StartPfad']) == ''
    {
      
$ZugriffAbVerzeichnis DEFAULTPFAD;
    }
    else
    {
      
$_POST['StartPfad'] = str_replace('../'''$_POST['StartPfad']); // keine relativen Pfadangaben erwünscht.
      
$_POST['StartPfad'] = str_replace('./''',  $_POST['StartPfad']);  

        
$ZugriffAbVerzeichnis DEFAULTPFAD.$_POST['StartPfad'];
    }

          
$STARTPFAD $_SERVER['DOCUMENT_ROOT'].'/'.$ZugriffAbVerzeichnis;
          if (!
file_exists($STARTPFAD ))     { die ('<p class="fehler">Bitte geben Sie einen g&uuml;ltigen Pfad ein!</p>');} 



   
//Suchbegriff grob vor Manipulationsversuche durch reguläre Ausdrücke schützen
   
$Suchbegriff trim(preg_quote($_POST['Suchbegriff']));

if (
$Suchbegriff != '')
    {

      
$gefundenes SuchNachText($STARTPFAD$Suchbegriff);
        echo 
"Gesucht wurde in: $STARTPFAD<br>\n";
        echo 
"Gesucht wurde nach der Funktion: $Suchbegriff<br>\n<hr>\n";
        
        
        echo 
"<pre>";
        
print_r($gefundenes);
        echo 
"</pre>";
  }
  
  if (!
is_array($gefundenes) AND $Suchbegriff  !='') echo '<p class="fehler">Nichts gefunden! </p>';



function 
SuchNachText$source $Suchbegriff )
{
  
// Schutz vor unerlaubten Zeichen.
  
if (!preg_match (REGEXP_FELDNAME_CHECK$Suchbegriff))
       die(
"Suche verweigert!:  Keine oder Verbotene Zeichen gefunden!");
       
  
// Zwischen "function" und dem Funktionsnamen dürfen beliebig viele Leerzeichen stehen
  
$Suchbegriff 'function\([[:space:]]\)\+'.$Suchbegriff;
        

    
// Nun grep starten.
    
$shellBefehl "grep -i -H  --directories=recurse '$Suchbegriff' $source";
    
exec($shellBefehl$Zeile);
    
    
// Erstelle eine Array, mit den Pfaden wo der Begriff vorkommt.
    
$c 0;
    foreach(
$Zeile as $Inhalt)
        {
            
$c+=1;
            
$teile explode(":"$Inhalt);
            
$Array[$c] = $teile[0] ;
        }    
        
        
        
// Möglich, wenn auch sehr unwahrscheinlich, das in einer einzigen Datei die
        // Funktion mehrfach vorkommen könnte.
        // z.B. der Fall, wenn eine ältere Version der Funktion im selben Script auskommentiert wurde.
        // Dann erscheint der Pfad doppelt...  Aus diesem Grund doppelte Pfade löschen.
        
        
if (!is_array($Array)) return FALSE;
        
        
$Array array_unique($Array);
            
// Gefundene(r) Pfad(e) abspulen
            
foreach ($Array as $key => $val
            {
                
$ZeileDetail '' ;
                
$shellBefehlDetail "grep -i -nsh '$Suchbegriff' $val";
                
exec($shellBefehlDetail$ZeileDetail);
                
$d ;
                foreach(
$ZeileDetail as $InhaltDetail)
                    {
                        
$d+=1;
                        
$teileDetail explode(":"$InhaltDetail);
                        
$Array2[$key][$d]['Pfad'] = $val ;
                        
$Array2[$key][$d]['Zeilennummer'] = $teileDetail[0] ;
                        
$Array2[$key][$d]['Vorschau']     = htmlentities($teileDetail[1]) ;
                    }    
            }        
    return 
$Array2;
}

?>

<p class="copyright">Copyright (c) by Martin Scheiben<br>
  Jede Haftung wird abgelehnt.</p>

</body>
</html>