Veröffentlicht 25. März 200322 j Also ich habe grade unsere Intranetseite fertiggestellt und suche jetzt möglichst ein PHP-Skript, welches kostenlos runterzuladen ist und eine Stichwortsuche für den Ordner, in dem es liegt und allen Unterordnern kann. Eine MySQL-Datenbank ist nicht vorhanden und wird da auch nicht draufkommen, daher sind Textdateien das einzige, wo was gespeichert werden kann. Zu durchsuchende Dateien sind PHP, HTM und TXT. Am liebsten wäre mir, ich werf das Ding in einen Ordner, bastel ein Formular dazu und fertig. Ach ja, und man soll die Ordner nicht selber eintragen müssen, das könnte ich selber proggen. Was an Technik vorhanden ist, ist Windows 2000 Server, IIS, PHP und durchgehend IE 6.0. Vielleicht hat ja schon mal jemand sowas gesucht und kann mir was empfehlen.:floet:
25. März 200322 j Originally posted by jomama Am liebsten wäre mir, ich werf das Ding in einen Ordner, bastel ein Formular dazu und fertig. Naja, ganz so einfach ist's nicht, aber ich hab mal fix was gestrickt. <?php $d = dir("/home/ICQ"); //Startdirectory $suchwort = "test"; //Suchwort echo "Path: ".$d->path." wird durchsucht<br>\n"; while($entry=$d->read()) { $fp = fopen($d->path."/".$entry,"r"); $inhalt = fread($fp, filesize($d->path."/".$entry)); if (stristr($inhalt,$suchwort)!= FALSE) { echo ($d->path."/".$entry."<br>\n"); } fclose($fp); } $d->close(); ?>[/PHP] Das Dingen kannst Dir ja dann so anpassen, wie Du möchtest. Hoffe, das hat Dir etwas geholfen. ICQ
25. März 200322 j Hallo, ich habe mal dieses Skript vor längerer Zeit getestet. Es lief eigentlich ganz gut. Frank
26. März 200322 j Autor Originally posted by *I C Q* Naja, ganz so einfach ist's nicht, aber ich hab mal fix was gestrickt. [...] Das Dingen kannst Dir ja dann so anpassen, wie Du möchtest. Hoffe, das hat Dir etwas geholfen. ICQ Den Ansatz hatte ich auch schon im Kopf, aber ich muss das so schreiben, das man neue Ordner nicht eintragen muss, also alle Unterordner automatisch durchsucht werden.
26. März 200322 j Hi, ich würde mal das Skript was palvoelgyi im Link angibt, ausprobieren. Das was das Skript von ICQ macht, bringt vielleicht ein Ergebnis aber je nachdem wieviel auf dem Server läuft und wieviel Dokumente durchsucht werden, gibt es mit Sicherheit ärger mit dem Admin. Eine Suche die nicht über einen Index geht, ist nunmal sehr langsam und Resourcen fressend. Gruß Jaraz
26. März 200322 j Autor Originally posted by palvoelgyi Hallo, ich habe mal dieses Skript vor längerer Zeit getestet. Es lief eigentlich ganz gut. Frank Hab das getestet, aber irgendwie läuft das mit IIS nicht.:confused:
26. März 200322 j Originally posted by jomama Den Ansatz hatte ich auch schon im Kopf, aber ich muss das so schreiben, das man neue Ordner nicht eintragen muss, also alle Unterordner automatisch durchsucht werden. Hmmm, OK, sprich: Wir arbeiten mit rekursiven Funktionen! Hab das Dingen mal ein wenig verbessert, probier's mal aus, vielleicht ist es ja das, was Du willst! <?php function scandir($dirname,$suchwort,&$arrfnd) { echo ("Durchsuche: $dirname<br>"); $handle = opendir($dirname); while (false != ($file = readdir($handle))) { if (is_dir ($dirname."/".$file) && $file!="." && $file != ".." && is_readable($dirname."/".$file)) { scandir ($dirname."/".$file,$suchwort,$arrfnd); } else { if (is_readable($dirname."/".$file)) { $fp = fopen($dirname."/".$file,"r"); $inhalt = fread ($fp,filesize ($dirname."/".$file)); if (stristr($inhalt,$suchwort)!=FALSE) { array_push ($arrfnd,$dirname."/".$file); } fclose($fp); } } } } $arrfnd = array(); $suchwort = "<?php"; //um z.B. alle Dateien zu finden, die php-Skripte enthalten scandir ("/home/ICQ/",$suchwort,$arrfnd); sort($arrfnd); reset($arrfnd); echo("<br>\"".htmlspecialchars($suchwort)."\" wurde in folgenden Dateien gefunden:<br>"); while (list ($nummer, $datei) = each($arrfnd)) { echo ($nummer.": ".$datei."<br>"); } ?> [/PHP] [i]Originally posted by Jaraz [/i] [b]Das was das Skript von ICQ macht, bringt vielleicht ein Ergebnis aber je nachdem wieviel auf dem Server läuft und wieviel Dokumente durchsucht werden, gibt es mit Sicherheit ärger mit dem Admin. [/b] Pffft, soll sich nicht so anstellen, der Admin! :D ICQ
26. März 200322 j [EDIT] Zwei Dinge muss ich jetzt noch hinzufügen: 1. Hab's mal "gebenchmarked" und über ein grösseres Verzeichnis gejagt. Ergebnis: Es wurden 11097 Dateien (34667166 Byte) und 726 Verzeichnisse in 29.600617051125 Sekunden gescanned! Macht 1,1 MB/sec oder 374,9 Dateien/sec. Ist also tatsächlich nicht unbedingt das schnellste! 2. Hab's danach mal über ein Riesenverzeichnis laufen lassen und da ist es mir abgestürzt mit der Meldung Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 4422469 bytes) in /Skriptpfad/tstsearch.php on line 21 Es kann natürlich sein, dass er einfach versucht hat, eine Riesendatei zu öffnen oder einfach zu viele Rekursionen durchgeführt hat. Ich werd mal schauen, ob ich da noch was verbessern kann. [/EDIT] ICQ
27. März 200322 j Autor Danke für die Antworten ich programmier mir aus den Vorschlägen grad selbst ne Suchmaschine. Auf die rekursiven Funktionen wär ich nie gekommen. :uli Hab das jetzt soweit fertig, das der Index anständig geschrieben wird. Jetzt möcht ich gern pro Zeile, die ich indexiere Sonderzeichen wie !,:;.\ entfernen. Ich ersetz das ganze dannmit preg_replace mit einem leeren String. Wie muss ich denn den Suchpattern schreiben?
27. März 200322 j Autor Originally posted by *I C Q* [EDIT] Zwei Dinge muss ich jetzt noch hinzufügen: 1. Hab's mal "gebenchmarked" und über ein grösseres Verzeichnis gejagt. Ergebnis: Es wurden 11097 Dateien (34667166 Byte) und 726 Verzeichnisse in 29.600617051125 Sekunden gescanned! Macht 1,1 MB/sec oder 374,9 Dateien/sec. Ist also tatsächlich nicht unbedingt das schnellste! 2. Hab's danach mal über ein Riesenverzeichnis laufen lassen und da ist es mir abgestürzt mit der Meldung Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 4422469 bytes) in /Skriptpfad/tstsearch.php on line 21 Es kann natürlich sein, dass er einfach versucht hat, eine Riesendatei zu öffnen oder einfach zu viele Rekursionen durchgeführt hat. Ich werd mal schauen, ob ich da noch was verbessern kann. [/EDIT] ICQ Das wird mein Problem Gottseidank nicht sein. Ich habs so geschrieben, das nur Dateien aufgenommen werden, die als Endung .php, .htm oder .html haben. Die hab ich mir mal in einer Liste ausgeben lassen und kam nur auf etwa sechshundert. Mein Index ist jetzt schlappe 700kB groß. Also zu vernachlässigen.
28. März 200322 j Hi, in der aktuellen c't ist dazu übrigens ein Artikel. Dort wird das Perl Skript Perlfect näher vorgestellt. http://www.perlfect.com/freescripts/search/ Gruß Jaraz
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.