SEO Welten
Buchempfehlungen
|
RegEx: Mit regulären Ausdrücken in Dateien suchenEin kleines Script mit SuchfunktionÜbersicht / Seite:
Einsatz und VerwendungGelegentlich kommt es vor, dass ein Webmaster alle Seiten eines
Verzeichnisses, einschließlich aller Seiten in den zu diesem Verzeichnis gehörenden Unterverzeichnissen,
nach einem bestimmten Codeabschnitt durchsuchen muss. Diese Aufgabe lässt im Xampp oder innerhalb des
eigenen Webspaces auf einem Server mit einem kleinen PHP-Script erledigen, welches auch die Suche mit
regulären Ausdrücken unterstützt. Doch Vorsicht, das Script sollte nach der Verwendung auf einem Server
unbedingt wieder gelöscht werden, da sich mit diesem auch Passwörter, Schwachstellen im Code usw.
ausspioniert werden könnten. FunktionsweiseIm ersten Schritt wird der gesuchte String oder Codeabschnitt mit Hilfe
eines kleinen Formulars an das Script gesendet, wobei eine Extension (Endung) auszuwählen ist,
um nur in Dateien mit einem bestimmten Dateiformat zu suchen, wie PHP oder HTML. Der gesuchte String und
die Extension werden dabei vom Formular per GET übermittelt und als QueryString an die URL des Scripts
angehängt. Um den gesuchten String oder Codeabschnitt innerhalb eines regulären Ausdruckes benutzen zu
können, wird im Eingangsbereich die Funktion preg_quote() verwendet, welche alle Zeichen innerhalb des
Suchmusters mit einem Backslash maskiert, die in regulären Ausdrücken von Bedeutung sein könnten. <meta charset="windows-1252"> Ist der verwendete Zeichenkodierung hingegen nicht bekannt, könnte dennoch
mit Hilfe eines regulären Ausdruckes nach diesem Meta-Tag gesucht werden. <meta charset(.*)> Da aber im Eingangsbereich die Funktion preg_quote() alle Zeichen im
gesuchten String oder im gesuchten Codeabschnitt maskiert, die eine Bedeutung für reguläre Ausdrücke
haben könnten, wird das verwendete Muster unbrauchbar. \<meta charset\(\.\*\)\> Abhilfe schafft hier die Funktion str_replace(), welche das Muster wieder
von überzähligen Schrägstrichen befreit. Sollen weitere reguläre Ausdrücke für die Suchfunktion zur
Anwendung kommen, müsste die Funktion str_replace() auch für diese Ausdrücke bereinigend eingesetzt
werden.
Das komplette Listing: <!DOCTYPE html> <html> <head> <title>Suche in Datei</title> <meta charset="windows-1252"> <meta name="robots" content="noindex,nofollow"> </head> <body> <div style="width: 600px; text-align: center; margin: auto"> <h1>Suche in Datei</h1> <form action="<?php echo basename($_SERVER["PHP_SELF"]); ?>" method="get" accept-charset="windows-1252"> <input name="muster" size="30" type="text"> <select name="endung"> <option>php</option> <option>htm</option> <option>html</option> <option>txt</option> <option>js</option> </select> <input type="submit" value="Suchen"> </form> </div> <hr style="color: #bcbcbc; background-color: #bcbcbc; border: 0px; height: 1px; margin-top: 22px; margin-bottom: 22px"> <div style="width: 600px; text-align: left; margin: auto"> <?php if (isset($_GET["endung"]) and !empty($_GET["endung"])){ $endung = $_GET["endung"]; } else {$endung = "php";} if (isset($_GET["muster"]) and !empty($_GET["muster"])){ $ansicht = $_GET["muster"]; $muster = preg_quote($ansicht); echo "<p>Der Suchbegriff <b>".htmlentities($ansicht, ENT_QUOTES)."</b> wurde<br>gefunden in:</p>\n"; function UmlautINS($umlautINS){ $sucheuml = array("Ä","ä","Ö","ö","Ãœ","ü","ß","Ä","ä","Ö","ö","Ü","ü","ß"); $ersetzel = array("Ä","ä","Ö","ö","Ü","ü","ß","Ä","ä","Ö","ö","Ü","ü","ß"); $guteuml = str_replace($sucheuml,$ersetzel,$umlautINS); return $guteuml; } function inDATEIEN($pfad){ global $endung; $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 ($meine == $endung) { $meinefiles[] = $pfad."/".$file; } } } closedir($daten); return $meinefiles; } $gefunden = inDATEIEN("."); echo "<ol>\n"; foreach($gefunden as $verwenden){ if (file_exists($verwenden)){ $datei = fopen($verwenden."","r") or die ("Fehler bei fopen!\n"); while(!feof($datei)) {$zeile = fgets($datei, 1024); $zeile = UmlautINS($zeile); $muster = str_replace("\(\.\*\)", "(.*)", $muster); if (preg_match("~".$muster."~i", $zeile)){ $benutzen[] = $verwenden; } } } else {echo "Wo liegt File?\n"; } } if (isset($benutzen)) { $inhaltvon = count($benutzen); if ($inhaltvon > 0){ $benutzen = array_count_values($benutzen); foreach($benutzen as $ausgeben => $treffer){ echo "<li>Insgesamt <b>".$treffer."</b> Treffer in ".$ausgeben."</li>\n"; } echo "</ol>\n"; } else {echo "Es wurde nichts gefunden!\n";} }} else {echo "Es wurde noch kein Suchbegriff übermittelt!\n";} ?> </div> </body> </html> Wichtiger Hinweis: Wie bereits weiter oben erwähnt, wer dieses Script innerhalb seines Webspaces verwendet, sollte es unbedingt nach Gebrauch wieder löschen, da die Suchfunktion kaum Sicherheit vor der Einschleusung von Schadcode und keine Sicherheit vor dem Ausspähen von Daten bietet. Weiterhin sollte das Script bei umfangreichen Projekten nie im Hauptverzeichnis abgelegt werden, um nicht Verzeichnisse mit wesentlich mehr als 100 bis 200 Seiten (Anzahl abhängig von der Dateigröße) durchsuchen zu müssen. Die Erprobung und Verwendung des Scripts erfolgt auf eigenes Risiko. Ein um einige Funktionen erweitertes Script finden sie auf der nächsten Seite. Formulareingaben | mit PHP prüfen « Reguläre Ausdrücke » erweitertes Script |
Navigation
Finden und - Optimierung -
Webcoding
Übersicht Web Services Tutorials &
und vieles mehr... XML |