Kommentare: 55 » aufmachen
Mike:
Warum benutzt du bei den Dateiendungen nicht einfach: foreach (glob("daten/*{*.php,*.txt}", GLOB_BRACE)... ??
Werner:
Leider funktioniert "GLOB_BRACE" nicht auf jedem Server (z.B.: Solaris) deshalb musste ich als Ersatz eine
foreach-Schleife einbauen.
Felix:
Bei mir klappt alles gut, nur steht immer nach der Suche:Warning: Invalid argument supplied for foreach() in /users/[Mein Benutzer/auch webseitenname]/www/suche.php on line 66Was mache ich Falsch?
Werner:
Wahrscheinlich hast du ein Verzeichnis falsch angegeben!
Dennis Six:
Hi,ich finde die Suchmaschine echt toll und benutze sie auch für meine Webseite. Nur habe ich noch eine kleine Frage: wie kann ich das anstellen die Groß- und Kleinschreibung zu deaktivieren?
Werner:
Ersetze
strstr durch
stristr . Allerdings wird dann das gesuchte Wort nicht mehr farbig hervorgehoben!
Yannick:
Die Suchmaschine ist genau das, was ich gesucht habe, leider habe ich dabei ein Problem. Ich inkludiere zum Beispiel in die datei "index.php" die Datei "index_text.html", aber die eigentliche Startseite "index.php" wird nicht unter den Treffern angezeigt. Ich hoffe du weißt was ich damit meine und kannst mir mit meinem Problem helfen.Gruß Yannick.
Werner:
Include-Dateien werden bei der Suche nicht eingebunden. Die Dateien können nur direkt ausgelesen werden.
Yannick:
OK, das Problem verstehe ich. Ich habe das Eingabefeld jetzt in meine Navigationsleiste eingebaut, aber wenn ich jetzt einen Suchbegriff eingebe, erscheinen die Ergebnisse auch in der Leiste. Ich möchte aber, dass sie in einer neuen Seite geöffnet werden. Wie kann ich das am Besten machen. Entschuldigung für die vielleicht dumme Frage. Gruß Yannick
Werner:
Viellicht hast du schon mal etwas vom Link-Attribut
target="_blank" gehört, dieses öffnet ein neues Fenster oder einen Tab.
echo "<p>" . $gefunden . ". <a href=\"" . $datei . "\" target=\"_blank\">" . $titel . "</a> <small>(" . substr_count($text, $_POST["suchbegriff"]) . "x)</small><br>" .
Yannick:
Das kenn ich schon, hat mir bei meinem Problem aber nicht geholfen. Es sieht immer noch so aus, dass die Suchergebnisse in der Navigationsleiste angezeigt werden. Entschludigung für die nervigen Fragen.
Werner:
Welche Navigationsleiste, benutzt du etwa Frames?
Yannick:
Ne, Frames benutzte ich nicht. Die Navigationsleiste wird mit include eingefügt. Ich hab mal zwei Bilder gemacht um darzustellen, wie's bei mir aussieht - ...
Werner:
In der Navigationsleiste brauchst du
nur ein Formular einzubauen (also nicht die Suchmaschine!):
<form method="post" action="kleine_suchmaschine.php">
<input type="text" name="suchbegriff" size="35" maxlength="40">
<input type="submit" name="suche" value="suchen">
</form>
Das Formular leitet die Suchanfrage dann an die Datei
kleine_suchmaschine.php weiter.
Die Datei "kleine_suchmaschine.php" formatierst du dann genau so wie deine anderen Seiten auch!
Yannick:
Danke! Jetzt gehts. Hätt ich eigentlich auch selbst drauf kommen kommen, wenn ich mal überlegt hätte
Doreen:
Hallo Werner,genau so ein Script habe ich gesucht, danke dafür.Ist es allerdings auch möglich bestimmte DIV Tags innerhalb der zu durchsuchenden Seiten auszuschließen? Da manche wichtigen Suchbegriffe in meiner Navigation auftauchen bekomme ich dann auch alle Seiten angezeigt.
Werner:
Ich habe meine Navigation in einer externen Datei, diese wird mit
include eingebunden. Damit die Navi nicht in den Suchergebnissen erscheint, hat diese das Vorzeichen "_" z.B.: "_navigation.php"
Monika:
Vielen Dank für das tolle Script! Ich habe lange gesucht und viel Unnützes gefunden, dieses jedoch hält was es verspricht!Viele Grüße und weiterhin viel Erfolg.
Philipp:
Super Suchmaschine, funktioniert einwandfrei im Firefox. Doch wenn ich die Seite per IE 8 aufrufe, funkioniert die suche nur wenn ich mit der Maus auf den Button klicke, nicht aber wenn ich die Enter-Taste betätige. An was kann das liegen?
Werner:
Es liegt mal wieder am IE

dieser sendet den Button (
value) nicht mit (warum auch immer!)
Habe eine Lösung gefunden, ersetze:
if (isset($_POST["suche"])) {
durch:
if (isset($_POST["suche"]) || isset($_POST["suchbegriff"])) {
Philipp:
ja, super so funktioniert es auch Prima mit dem IE. Danke für die prompte Antwort.
Manfred:
Hallo,ich finde Ihre Suchmaschine sehr gelungen. Manchmal sind die Zielseiten doch etwas lang. Sehen Sie die Möglichkeit auf "einfache" Weise

den Suchbegriff auf der Zielseite auch zu markieren (ähnlich, wie auf der Ergebnisseite "kleine Suchmaschine")?
Werner:
»
Text suchen und markieren mit JavaScript
Riko:
ich habe folgennes problem, wenn ich was ins suchfeld eingebe und suche erscheint folgende nachicht
Warning: Invalid argument supplied for foreach() in /usr/export/www/vhosts/funnetwork/hosting/rikokeil/kleine_suchmaschine.php on line 75
Werner:
Welche Verzeichnisse hast du ab Zeile
34 denn eingetragen?
Colossos:
Vielen Dank für die kurze aber effiziente Suchmaschine.Ich habe da aber doch ein Problem: Obwohl ich als Textausschnitt 60 Zeichen eingestellt habe, bekomme ich nur: […] […] ausgegeben. Bei jedem Suchergebnis. Woran kann das liegen?
Werner:
Ich habe die Suchmaschine angepasst, der Suchbegriff wird jetzt auch am Anfang des Textausschnitts markiert und der Textausschnitt hat jetzt immer mindestens 60 Zeichen (je nach Vorgabe).
Michael:
Hallo, leider erhalte ich vom Server die Fehlermeldung "Fatal error: Call to undefined function: str_ireplace() in..." Kann mit ggf. jemand einen Tipp geben woran das liegt? Danke und Grüße Michael
Werner:
Dein Webserver unterstüzt kein PHP 5. Ersetze
str_ireplace durch
str_replace
Michael:
Hallo, vielen Dank! Die Suchmaschnine funktioniert nun echt super.
Mike:
Die Suche nach Dateinamen ist zwar nützlich, aber wie kann ich dieses verhindern?
Werner:
Lösche einfach folgenden PHP-Code:
or stristr($dateiname, $_POST["suchbegriff"])
Mike:
Ok, das funktioniert. Nun habe ich in manchen Textauschnitten
< oder
> drin (weil ich das so in manchen Seiten verwende). Wie kann ich das durch
< > - Html-Klammern ersetzen?
Werner:
Ersetze folgenden PHP-Code:
$text = strtr(strip_tags($text),
durch:
$text = strtr(htmlspecialchars_decode(strip_tags($text)),
Mike:
Wie kann ich die Reihenfolge der Suchergebnisse beeinflussen?
Werner:
Indem du die Reihenfolge der Verzeichnisse entsprechend anpasst.
equinoxx:
WOW! Das Teil nenne ich mal gelungen @Werner! RESPEKT! Leicht verständlich ist das Script auch! Derzeit suche ich noch den / die Fehler, warum meine eigenen SuMa-Scripte nicht funktionierten. Vielen dank und weiter so auch im neuen Jahr! Gruß Thomas
schicki:
Hallo Werner! Die Suchfunktion funktioniert bestens. Nachdem ich jedoch, wie einer meiner Vorredner, einige Dateien per include eingebunden habe, dachte ich daran, die meta-daten (keywords) auch durchsuchen zu lassen und so für jede Seite Suchbegriffe vorzudefinieren. Könntest du mir bitte helfen, wie ich den Code anpassen muss? DANKE!
Dominik:
Die Suchmaschine ist toll!
Jeff:
Ich habe absolut keinen blassen Schimmer von php. Habe mir nur etwas HTML angeeignet. Da wollte ich nur vorweg sagen.Doch wollte ich auf meiner HP eine Suchfunktion einbinden. Habe den Quelltext kopiert und eingefügt. Aber ich komme auf keinen grünen Zweig.Muss ich die Datei dann als .php abspeichern?
Werner:
Ja, die Datei muss die Dateiendung .php haben, außerdem muss der Webserver auf dem deine Homepage steht PHP unterstützen.
Jeff:
OK, Danke schonmal Werner. Mein Server unterstützt php und ich kann die Seite aufrufen.Gibt es denn eine Möglichkeit, diese Suche in ein Div auf einer html-Seite einzubinden?
Werner:
Du kannst die Suche in ein iFrame einbauen. In einen DIV geht das nur über JavaScript (Ajax).
Aber wozu denn eigentlich irgendwo einbauen? Die "Suche"-Seite ist nichts anderes als eine HTML-Seite mit etwas PHP darin.
Jeff:
Ich hab es über ein Formular eingebaut und es schaut so aus als ob es soweit funktioniert.Die meisten Webseiten haben doch so eine Suchfunktion direkt auf der Startseite eingebunden.Vielleicht hilft dir meine Adresse:
www.sg-handwerk.de/versuch/index.html Bei vergleichbaren Homepages öffnet sich nach der Eingabe des Suchbegriffes dann im mittleren div eine Ergebnisliste.
ede:
hallo werner, zu utf-8: ich habe
$_POST["suchbegriff"] = htmlentities($_POST["suchbegriff"],ENT_QUOTES,"UTF-8"); eingefügt und jetzt kann ich mit umlauten suchen.im array habe ich die umwandlung gelöscht. Es funktioniert sehr gut.jetzt noch die speicherung in der suchdatei und es ist perfekt. Noch einmal vielen dank für das tolle script ich habe wieder etwas gelernt.
ede:
Es werden keine Überschriften "<h1>" gefunden. Kann man das noch einbauen?
Werner:
Es wird jeder Text gefunden auch Text in Überschriften. Vielleicht wolltest du aber die Überschrift (h1) in den Suchergebnissen mit ausgeben lassen.
Baue folgendes nach
unset($t[1]); $dateinr++; ein (ohne die PHP-Tags) :
<?php
preg_match("/<h1>(.*?)</i", $text, $h);
$heading = isset($h[1]) ? '<b>' . $h[1] . '</b><br>' : '';
unset($h[1]);
?>
$heading dann einbauen bei:
. 'x)</small><br>' . $heading .
Rene:
Danke für deine Suchmaschine, das Script läuft super! Eine Frage noch, ich habe im Titel-Tag eine php-Variable stehen, die ich aus einer anderen Datei per include einbinde. Das Suchscript erkennt diesen Titel nicht sodass er auch bei den Suchergebnissen nicht erscheint.
Werner:
Der PHP-Quellcode wird vom Server erst geparst wenn dieser vom Browser aufgerufen wird, das Suchscript durchsucht aber bereits den original Quellcode.
Frank:
Habe dieses Script zum zählen der Dateien
<?php
$filecount=0;
$dir="xyzPolicen";
$dirh=opendir($dir);
while($filename=readdir($dirh))
{
if($filename!="." && $filename!=".." && is_file($dir."/".$filename)) $filecount++;
}
closedir($dirh);
echo "Es befinden sich ".$filecount." Dateien im Ordner ".$dir;
?>
Dieses Script zählt mehr Dateien als dieses von Euch
Werner:
Dann musste halt dein Script zum suchen nehmen
Es sollen auch nicht alle Dateien gefunden werden, sondern nur die mit einer
bestimmten Dateiendung:
/* Die Dateiendungen der Dateien die gefunden werden sollen */
$dateiendungen = array(
...
)
Dateiendungen mit Großbuchstaben müssen extra eingetragen werden.
Frank:
Hallo Werner!
Vielen Dank für die schnelle Antwort. Es sind nur pdfs im Verzeichnis. Allerdings sind die Endungen mal pdf und mal PDF geschrieben. Habe nun PDF hinzugefügt. Es funzt. Homepage-Total.de ist eine wirklich gute Seite, besonders für Menschen wie mich. Hoffe, die bleibt noch lange online.
Liebe Grüße, Frank
macmoldis:
Die kleine Suchmaschine ist das was ich gesucht habe, Danke, funktioniert jetzt auch so, wie ich es haben wollte.
Als erstes hatte ich den Eindruck, dass beim Erstellen von $textteil in Zeile 134 in dem Fall dass "strpos(..., $_POST["suchbegriff"]) - $textausschnitt)" einen negativen Betrag ergibt, der $textteil in der $ausgabe erst mit Beginn des Suchbegriffs angezeigt wird ... das hab ich versucht, in dem ich den Startwert, wenn kleiner als 0 so auf 0 setzte und so der $textteil von Beginn des Textes an angezeigt wird.
Als zweites, oder war das das erste, was mir auffiel, Groß- und Kleinschreibung bei strpos?
strpos macht da Unterschiede, richtig? ... und gibt so bei unterschiedlicher Schreibweise dann auch für substr auch keinen Startwert aus
Habe deswegen dann den Suchbegriff und den $text mit strtolower klein gemacht und mir so den Startwert für substr gesucht.
<?php
// Habe nun statt Zeile 134
// alt:
$textteil = substr($text, (strpos($text, $_POST["suchbegriff"]) - $textausschnitt), (strlen($_POST["suchbegriff"]) + ($textausschnitt * 2)));
// *******
// neu:
$suche = $_POST["suchbegriff"];
$suchekl = strtolower($suche)
$textkl = strtolower($text)
$start = strpos($textkl, $suchekl) - $textausschnitt;
if ($start <0) { $start = 0; }
$ende = strlen ($suche) + $textausschnitt *2;
$textteil = substr($text, $start, $ende);
?>
Meine Eindrücke richtig oder hab ich vorher irgend etwas anderes vermehrt?
... und natürlich die Frage, ist der Lösungsanatz so in Ordnung ... klar funktioniert ja, nee wollt mal 'ne Fachmannmeinung dazu
Und noch ein drittes, weiter oben war die Frage nach dem Durchsuchen von include-Dateien.
Ich hab das für mich so gelöst, das a) die include-Datei einen passenden Teil des Dateinames der anzuzeigenden Datei hat und b) daraus dann, aus dem Include-Dateinamen per substr den neuen (anzuzeigenden) Dateinamen(+Pfad) und den $titel gebastelt.
Funktioniert auch ....
Danke und Grüße macmoldis
Werner:
Hallo, der negative Betrag von $textteil ist mir noch nicht aufgefallen -- Danke für den Hinweis.
Dein Lösungsanatz ist gut, ich werde die Suchmaschine demnächst mal überarbeiten.
Esther K.:
Ganz herzlichen Dank für die Suchfunktion in php, die ich nun in meine Webseite für chinesischen Kräuter einfügen konnte. So erspare ich mir die aufwendigen Inhaltsverzeichnisse, die auch zu umständlich sind.