Home
Navigation
Impressum
SEO Welten - Webcoding, Editoren, Scripte und Anwendungen
SEO Welten
Buchempfehlungen
 

RegEx: Mit regulären Ausdrücken im Quellcode von Dateien suchen

 Ein Script mit erweiterter Suchfunktion

Übersicht / Seite:

  1. Reguläre Ausdrücke (kleine Einführung mit Beispielen zur Syntax)
  2. Formulareingaben überprüfen (Eingaben auf Vollständigkeit überprüfen)
  3. Reguläre Ausdrücke mit PHP prüfen (...und RewriteRules testen)
  4. Mit Regex in Dateien suchen (kleines Script mit Suchfunktion)
  5. Im Quelltext/Quellcode suchen (Script zur Suche in Dateien)

Einsatz und Verwendung

Beim Code-Listing auf dieser Seite handelt es sich im Prinzip um das auf der vorausgehenden Seite bereits beschriebene Script, welches lediglich um einige nützliche Funktionen erweitert wurde. Es kann, wie beschrieben, in einem Verzeichnis abgelegt werden, um alle Dateien in diesem und in den zu diesem Verzeichnis gehörenden Unterverzeichnissen nach einem Codefragment / Snippet im Quelltext bzw. Quellcode zu durchsuchen.
Darüber hinausgehend können alle in den Dateien verwendeten CSS Style Classes, insofern diese mit class="..." den Elementen zugewiesen wurden, aufgelistet werden. Weiterhin lassen sich ebenso alle in den Dateien verwendeten IDs und alle externen Links auflisten.

Was das Script nicht kann: Alles was in einer Datenbank abgelegt wurde, kann nicht durchsucht werden und so werden Snippets, Classes, IDs und Links nur dann gefunden, wenn diese mit einer Datei abgespeichert wurden.

Vor "<?php header" darf sich kein Zeichen, auch kein Leerzeichen befinden. Die Datei darf aus selbigem Grund nicht mit BOM abgespeichert werden! Sollte es dennoch zu Fehlermitteilungen kommen, entfernen Sie diese erste Zeile, womit jedoch nicht mehr sichergestellt ist, dass alle Zeichen richtig erkannt werden.
 
Wichtiger Hinweis: Wie bereits auf der voraug­ehenden Seite erwähnt, wer dieses Script innerhalb seines Webspaces für eine Suche im Quellcode seiner Dateien verwendet, sollte das Script nach Gebrauch wieder löschen. Nur durch ein Löschen wird sichergestellt, dass Unbefugte keinen Zugriff auf das Script erhalten, um in den ungeparsten Dateien nach Zugriffsmöglichkeiten, Passwörtern oder Schwach­stellen zu suchen. Ebenso wäre eine Einschleusung von Schadcode nicht völlig auszu­schließen, insofern ein Unbefugter Zugriff auf das Script erhalten sollte.

Weiterhin wird empfohlen, die Anzahl der zu durch­suchenden Dateien durch die Auswahl einer Dateiendung (Extension) oder durch die Ablage des Scripts in einem Unterverzeichnis zu verringern.

Die Verwendung und Erprobung des Scripts erfolgt auf eigenes Risiko.

Weitere Einzelheiten: Weitere Einzelheiten zur Ver- wendung sind den Screenshots zu entnehmen.

» Screenshots «


Suche in Dateien (beliebig.php):

<?php header("Content-Type: text/html; charset=windows-1252"); ?>
<!DOCTYPE html>
<html>

<head>
<title>Suche in Dateien</title>
<meta charset="windows-1252">
<meta name="robots" content="noindex,nofollow">
<style type="text/css">
body {background-color:#F1EDDA}
div.eins {width:600px; height:368px; background-color:#ECE4CA; text-align:center; border:1px solid #ffffff; border-radius:6px; margin:auto}
div.zwei {width:600px; background-color:#ECE4CA; text-align:left; padding:5px; border:1px solid #ffffff; border-radius:6px; margin:auto}
div.drei {width:500px; background-color:#F2F1E6; text-align:left; padding:5px; margin-top:28px; margin-bottom:12px; margin-left:auto; margin-right:auto; border:1px solid #ffffff; border-radius:4px}
p.inpusu {text-align:center;}
hr.linie {clear:both; color:#bcbcbc; background-color:#bcbcbc; border:0px; height:1px; margin-top:22px; margin-bottom:22px}
.beispan {background-color:#F0EFDD; color:#808080; padding-left: 10px; padding-right: 10px; border:1px solid #ffffff}
</style>
</head>

<body>
<?php

/*--- Übermittelte GET-Daten auswerten und für Formular aufbereiten.---------------------------*/

if (isset($_GET["Extension"]) and !empty($_GET["Extension"])){

    $extension = $_GET["Extension"];
    $extension = preg_replace("/[^a-z]/i", "", $extension);
}
else {$extension = "Alle";}

if (isset($_GET["Anzahl"]) and !empty($_GET["Anzahl"])){

    $anzahl = $_GET["Anzahl"];
    $anzahl = preg_replace("/[^0-9]/", "", $anzahl);
}
else {$anzahl = 200;}

$anzahl ==  200 ? $anz2 = "checked=\"checked\"" : $anz2 = "";
$anzahl ==  300 ? $anz3 = "checked=\"checked\"" : $anz3 = "";
$anzahl ==  500 ? $anz5 = "checked=\"checked\"" : $anz5 = "";
$anzahl == 2000 ? $anz6 = "checked=\"checked\"" : $anz6 = "";

/*-----------------------------------------------------------------------------------------------
 Die maximale Ausführungszeit von 30 auf 60 Sekunden mit set_time_limit zu erhöhen wird nur 
 funktionieren, wenn PHP nicht im Safe Mode ausgeführt wird und der Hoster eine Änderung erlaubt. 
 ------------------------------------------------------------------------------------------------
*/ 
if ($anzahl > 300) set_time_limit(60); 


if (isset($_GET["Auswahl"]) and !empty($_GET["Auswahl"])){

    $was = $_GET["Auswahl"];
    $was = preg_replace("/[^0-9]/", "1", $was);
}
else {$was = 1;}

$was == 1 ? $was1 = "checked=\"checked\"" : $was1 = "";
$was == 2 ? $was2 = "checked=\"checked\"" : $was2 = "";
$was == 3 ? $was3 = "checked=\"checked\"" : $was3 = "";
$was == 4 ? $was4 = "checked=\"checked\"" : $was4 = "";
$was == 5 ? $was5 = "checked=\"checked\"" : $was5 = "";

if (isset($_GET["Gesucht"]) and !empty($_GET["Gesucht"])) {

$ausgabe = trim($_GET["Gesucht"]);
}
else {$ausgabe = "";
}
?>
<div class="eins">
<h1>Suche im Quellcode von Dateien</h1>
    <form action="<?php echo basename($_SERVER["PHP_SELF"]); ?>" method="get" accept-charset="windows-1252">
    <input name="Gesucht" type="text" value="<?php echo htmlspecialchars($ausgabe); ?>" size="60"> in 
    <select name="Extension">
        <option><?php echo $extension; ?></option>
        <option>Alle</option>
        <option>php</option>
        <option>htm</option>
        <option>html</option>
        <option>txt</option>
        <option>css</option>
        <option>js</option>
    </select>
    <div  class="drei">
    <input type="radio" name="Auswahl" value="1" <?php echo $was1; ?>>Einfache Suche<br>
    <input type="radio" name="Auswahl" value="2" <?php echo $was2; ?>>Mit Verwendung von (.*)<br>
    <br><em>Bei den folgenden Sucheanfragen ist keine Benutzereingabe erforderlich:</em><br>
    <br>
    <input type="radio" name="Auswahl" value="3" <?php echo $was3; ?>>Alle benutzten CSS Style Classes<br>
    <input type="radio" name="Auswahl" value="4" <?php echo $was4; ?>>Alle verwendet IDs<br>
    <input type="radio" name="Auswahl" value="5" <?php echo $was5; ?>>Alle externen Links<br>
    </div>
    <p class="inpusu">In Anzahl Dateien suchen:
    <input type="radio" name="Anzahl" value="200"  <?php echo $anz2; ?>>200
    <input type="radio" name="Anzahl" value="300"  <?php echo $anz3; ?>>300
    <input type="radio" name="Anzahl" value="500"  <?php echo $anz5; ?>>500
    <input type="radio" name="Anzahl" value="2000" <?php echo $anz6; ?>>2.000 &nbsp;
    <input type="submit" value="Suchen"><p>
    </form>
</div>
<hr class="linie">
<div class="zwei">
<?php

if ((isset($ausgabe) and !empty($ausgabe)) or $was > 2){

    $gesucht = preg_quote($ausgabe);

function UmlautINS($umlautINS){

    $sucheuml = array("Ä","ä","Ö","ö","Ü","ü","ß","&Auml;","&auml;","&Ouml;","&ouml;","&Uuml;","&uuml;","&szlig;");
    $ersetzel = array("Ä","ä","Ö","ö","Ü","ü","ß","Ä","ä","Ö","ö","Ü","ü","ß");
    $guteuml  = str_replace($sucheuml,$ersetzel,$umlautINS);

    return $guteuml;
}

/*----------------------------------------------------------------------------------------------
 Namen und Pfade von zu durchsuchenden Dateien einlesen. Eingelesen werden alle Dateinamen aus 
 einem Verzeichnis, wobei die jeweiligen Unterverzeichnisse mit eingeschlossen werden, insofern 
 keine Auswahl bei der Extension getroffen wurde.
 -----------------------------------------------------------------------------------------------
*/

function inDATEIEN($pfad){

    global $extension;
    $meinefiles = array();
    $daten=opendir($pfad);

    while (false !== ($file = readdir($daten))) {

        $meine = pathinfo($file);

        if (isset($meine["extension"]) and !empty($meine["extension"])) {

            $meine = $meine["extension"];
        }
        if ($file != "." and $file  != ".."){

            if (is_dir($pfad."/".$file)){

                $alle = inDATEIEN($pfad."/".$file);

                foreach ($alle as $alles){

                    $meinefiles[] = $alles;
                }
            }
            elseif ($extension == "Alle") {

                $meinefiles[] = $pfad."/".$file;
            }
            elseif ($extension == $meine) {

                $meinefiles[] = $pfad."/".$file;
            }
        }
    }
closedir($daten);
return $meinefiles;
}

$gefunden = inDATEIEN(".");


/*--- Durchsuchen der eingelesenen Dateien ----------------------------------------------------*/

$zuviel = count($gefunden);

if ($zuviel <= $anzahl) {

foreach($gefunden as $verwenden){

    if (file_exists($verwenden)){

        $datei = fopen($verwenden."","r") or die ("Fehler I\n");

        while(!feof($datei)) {

            $zeile = fgets($datei, 1024);
            $zeile = UmlautINS($zeile);

            if ($was == 2) {$gesucht = str_replace("\(\.\*\)", "(.*)", $gesucht);}
            if ($was == 3) {$gesucht = "class=\"([^\"]+)\"";}
            if ($was == 4) {$gesucht = "id=\"([^\"]+)\"";}
            if ($was == 5) {$gesucht = "href=\"http:\/\/([^\"]+)\"";}

            if (preg_match_all("~".$gesucht."~i", $zeile, $funde)){

            for ($i = 0; $i < 3; $i++) {

                if (isset($funde[0][$i]) and !empty($funde[0][$i])){

                    if ($was < 5){

                        if (isset($funde[1][$i]) and !empty($funde[1][$i])) {

                            $benutz1[] = htmlspecialchars($funde[1][$i]);
                        }
                        else {$benutz1[] = htmlspecialchars($funde[0][$i]);}

                        $benutz2[] = "<strong>".htmlspecialchars($verwenden)."</strong> => ".htmlspecialchars($funde[0][$i]);
                    }
                    $hostpos = stripos($funde[0][$i], $_SERVER["HTTP_HOST"]);

                    if ($was == 5 and $hostpos === false){

                        $benutz1[] = htmlspecialchars($funde[1][$i]);
                        $benutz2[] = "<strong>".htmlspecialchars($verwenden)."</strong> => ".htmlspecialchars($funde[0][$i]);
                    }
                }
            }
            }
        unset($funde);
    }
    unset($verwenden);
    }
    else {echo "Fehler II\n";
    }
}}
else {echo "Sie versuchen mehr als ".htmlspecialchars($anzahl)." Dateien auf einmal zu durchsuchen!<br>\n".
           "Sie können die Anzahl bis 2.000 erhöhen, doch besser wäre es die Anzahl<br>\n".
           " über die Auswahl einer Extension <em>(Endung)</em> einzugrenzen.";}


/*--- Ausgabe der eingelesenen Funde und Treffer ----------------------------------------------*/

if (isset($benutz1) and isset($benutz2)) {

    $invon = count($benutz2);

    if ($invon > 0){

        echo "<p>Treffer insgesamt:</p>\n<ol>\n";

        $benutz1 = array_count_values($benutz1);

        foreach($benutz1 as $ausgeben1 => $treffer1){

            echo "<li>Insgesamt <strong>".htmlspecialchars($treffer1)."</strong>-mal \"".$ausgeben1."\"</li>\n";
        }
        echo "</ol>\n<p>Treffer in Datei:</p>\n<ol>\n";

        $benutz2 = array_count_values($benutz2);

        foreach($benutz2 as $ausgeben2 => $treffer2){

            echo "<li>Insgesamt <strong>".htmlspecialchars($treffer2)."</strong> Treffer in ".$ausgeben2."</li>\n";
        }
        echo "</ol>\n";
    }
    else {echo "Es wurde nichts gefunden!\n";}
    }
}
else {echo "Es wurde noch kein Suchbegriff übermittelt!\n";}
?>
</div>
</body>
</html>

Copyright © 2006 - Verlag Horst Müller - Stendal | Datenschutz | Nutzungsbedingungen