planetsearch - Das angegebene Skript konnte nicht fehlerfrei aus
Steffi
- php
-1 Error 500
Christoph Schnauß0 Steffi0 Christoph Schnauß0 Steffi0 Christoph Schnauß0 Tom
0 Tom
0 Tom
Hallo an Alle,
kennt jemand das Script planetsearch???
Also ich habe das Teil nach deren Anweisungen bei mir eingebaut...
Es ist so programmiert, dass Fehlermeldungen kommen, falls man das Suchfeld leer lässt, bzw. nur 1 oder 2 Buchstaben rein schreibt.
Die Fehlermeldungen funtkionieren, aber wenn ich ein Wort eingebe und auf den Button klicke kommt nur das:
Das angegebene Skript konnte nicht fehlerfrei ausgeführt werden!
Woher weiß ich jetzt, was falsch ist???
Hier der Link zu dem Suchfeld: http://www.katzenundhundetipps.de/Test/suchfeld.htm
Danke schon mal für Eure Hilfe...
LG
Steffi
hallo,
kennt jemand das Script planetsearch?
Nein. Woher auch?
Es ist so programmiert, dass Fehlermeldungen kommen, falls man das Suchfeld leer lässt, bzw. nur 1 oder 2 Buchstaben rein schreibt.
Das sind keine echten Fehlermeldungen, sondern Scriptmeldungen.
Die Fehlermeldungen funtkionieren, aber wenn ich ein Wort eingebe und auf den Button klicke kommt nur das:
Das angegebene Skript konnte nicht fehlerfrei ausgeführt werden!
Wichtiger als dieser Satz ist die Mitteilung, daß es sich um Error 500 handelt.
Woher weiß ich jetzt, was falsch ist?
Du schaust dir dein Script an, prüfst, was passieren soll, wenn ein Wort eingegeben wird, und korrigierst genau diese Stelle so lange, bis das passiert, was du gerne haben möchtest.
Hier der Link zu dem Suchfeld: http://www.katzenundhundetipps.de/Test/suchfeld.htm
Erstens ist das kein Link (wie das mit Links geht, steht in der Forums-FAQ), zweitens nutzt das gar nichts. Du müßtest schon den entsprechenden Teil deines Scripts posten.
Grüße aus Berlin
Christoph S.
hallo,
kennt jemand das Script planetsearch?
Nein. Woher auch?
Aus dem Internet.
Es ist so programmiert, dass Fehlermeldungen kommen, falls man das Suchfeld leer lässt, bzw. nur 1 oder 2 Buchstaben rein schreibt.
Das sind keine echten Fehlermeldungen, sondern Scriptmeldungen.
Okay, bin leider nicht so firm in der Computersprache.
Die Fehlermeldungen funtkionieren, aber wenn ich ein Wort eingebe und auf den Button klicke kommt nur das:
Das angegebene Skript konnte nicht fehlerfrei ausgeführt werden!Wichtiger als dieser Satz ist die Mitteilung, daß es sich um Error 500 handelt.
Und was bedeutet der Error 500???
Woher weiß ich jetzt, was falsch ist?
Du schaust dir dein Script an, prüfst, was passieren soll, wenn ein Wort eingegeben wird, und korrigierst genau diese Stelle so lange, bis das passiert, was du gerne haben möchtest.
Wenn man etwas davon versteht, ist das bestimmt kein Problem, aber wenn ich es könnte, hätte ich hier nicht gepostet.
Hier der Link zu dem Suchfeld: http://www.katzenundhundetipps.de/Test/suchfeld.htm
Erstens ist das kein Link (wie das mit Links geht, steht in der Forums-FAQ), zweitens nutzt das gar nichts. Du müßtest schon den entsprechenden Teil deines Scripts posten.
Hier ist der entsprechende Teil:
$search_arr = explode(" ",$search_exp);
$search_count = count($search_arr);
$arr = array();
$arr_all = array();
$tmpl = join('', file("./tmpl/search_result.htm"));
preg_match_all("=[SEARCH_START](.*)[SEARCH_STOP]=siU", $tmpl, $between);
$search_pages = 0;
$cont_part = walk_dir($root_dir); // Verzeichnisdurchlauf starten
$search_pages = count($cont_part); // Anzahl der Trefferseiten
rsort($cont_part); // Array sortieren
for ($j=0; $j<$search_pages; $j++) { // Arrays auslesen
list($anz_searchexp, $title, $descr, $new_path) = $cont_part[$j];
$content = preg_replace("=[SEARCH_TITLE]=", "$title", $between[1][0]);
$content = preg_replace("=[SEARCH_LINK]=", "$from_dir"."$new_path", $content);
$content = preg_replace("=[SEARCH_DESC]=", "$descr", $content);
$content = preg_replace("=[SEARCH_COUNT]=", "$anz_searchexp", $content);
$cont_x .= $content;
}
// Suchergebnis zusammenstellen und anzeigen
$tmpl = preg_replace("=[SEARCH_START](.*)[SEARCH_STOP]=siU", $cont_x, $tmpl);
$search_exp = str_replace('\', '', $search_exp);
$tmpl = preg_replace("=[SEARCH_WORDS]=", $search_exp, $tmpl);
$tmpl = preg_replace("=[SEARCH_PAGES]=", $search_pages, $tmpl);
if (empty($cont_part)) {
$tmpl = preg_replace("=[NO_MATCH]=", $no_match, $tmpl);
} else {
$tmpl = preg_replace("=[NO_MATCH]=", "", $tmpl);
}
eval('?>' . $tmpl);
#################################################
foreach ($search_arr as $search_exp) {
$zeilen = file("./_log/search_log.txt");
$anz_zeilen = sizeof($zeilen);
$x=0;
for ($i=0; $i<$anz_zeilen; $i++) {
list ($search_word, $search_num) = split("\|", chop($zeilen[$i]));
// wenn Suchbegriff gefunden wird
if ($search_exp==$search_word) {
$search_num++;
$i-2;
$x++;
}
$new_log .= "$search_word|$search_num\n";
}
// wenn der Suchbegriff nicht schon geloggt wurde
if ($x==0) {
$search_num = "1";
$new_log .= "$search_exp|$search_num\n";
}
$data = fopen("./_log/search_log.txt","w+");
flock($data,1);
fwrite($data, $new_log);
flock($data,3);
fclose($data);
unset($new_log);
}
#################################################
Gruß
Steffi
Grüße aus Berlin
Christoph S.
hallo,
kennt jemand das Script planetsearch?
Nein. Woher auch?
Aus dem Internet.
Das Internet ist relativ groß. Und ich hatte bisher keinen Anlaß, es nach einem Script mit diesem Namen zu durchsuchen.
Das angegebene Skript konnte nicht fehlerfrei ausgeführt werden!
Wichtiger als dieser Satz ist die Mitteilung, daß es sich um Error 500 handelt.
Und was bedeutet der Error 500?
Dasselbe ;-) Aber es "bedeutet" das eben nur, der Wortlaut könnte auch sehr anders lauten. Diese Zeile ist lediglich eine freundliche Zutat.
Hier ist der entsprechende Teil:
[...]
$cont_part = walk_dir($root_dir); // Verzeichnisdurchlauf starten
$search_pages = count($cont_part); // Anzahl der Trefferseiten
Hier _könnte_ es bereits einen Einbruch geben. Dieses "walk_dir" ist möglicherweise eine Funktion, die noch irgendwoanders in deinem Script definiert worden sein müßte. Und der Wert von $root_dir ist in dem von dir jetzt angegebenen Scriptausschnitt ebenfalls nicht enthalten. Es könnte sein, daß diese Zeilen etwas verlangen, was unmöglich ist, daher der Error 500.
if (empty($cont_part)) {
$tmpl = preg_replace("=[NO_MATCH]=", $no_match, $tmpl);
} else {
$tmpl = preg_replace("=[NO_MATCH]=", "", $tmpl);
}
Hier hast du zumindest die Erklärung dafür, daß bei leer gelassenem Suchfeld etwas angezeigt wird.
Logdatei schreiben
Wunderbar. Wird denn in diese Protokolldatei etwas geschrieben, und wenn ja, was steht da drin?
Grüße aus Berlin
Christoph S.
hier die HP zu dem Script: http://www.planetc.de
Hier ist der entsprechende Teil:
[...]
$cont_part = walk_dir($root_dir); // Verzeichnisdurchlauf starten
$search_pages = count($cont_part); // Anzahl der TrefferseitenHier _könnte_ es bereits einen Einbruch geben. Dieses "walk_dir" ist möglicherweise eine Funktion, die noch irgendwoanders in deinem Script definiert worden sein müßte.
Hier ist nochmal das walk_dir enthalten.
function walk_dir($dir, $pos=2)
{
global $search_exp, $search_arr, $search_count, $arr, $ignore_dir, $dat_type, $root_dir, $search_area, $cont_part, $no_title, $search_pages, $arr_all;
$handle = @opendir($dir);
while ($file = @readdir ($handle))
{
if (preg_match("=^.{1,2}$=",$file))
{
continue;
}
$cut_dir = preg_replace("=$root_dir=siU", "", $dir); // Verzeichnisse zum Vergleich anpassen
if (in_array($cut_dir, $ignore_dir)) continue; // zu ignorierende Verzeichnisse auslassen
if (preg_match('=(_vti_cnf|_notes)=i', $cut_dir)) continue;
if(is_dir($dir.$file))
{
walk_dir($dir.$file."/", $pos + 3);
}
else
{
Und der Wert von $root_dir ist in dem von dir jetzt angegebenen Scriptausschnitt ebenfalls nicht enthalten. Es könnte sein, daß diese Zeilen etwas verlangen, was unmöglich ist, daher der Error 500.
Das root_dir ist in der Datei config.inc.php enthalten.
if (empty($cont_part)) {
$tmpl = preg_replace("=[NO_MATCH]=", $no_match, $tmpl);
} else {
$tmpl = preg_replace("=[NO_MATCH]=", "", $tmpl);
}Hier hast du zumindest die Erklärung dafür, daß bei leer gelassenem Suchfeld etwas angezeigt wird.
Logdatei schreiben
Wunderbar. Wird denn in diese Protokolldatei etwas geschrieben, und wenn ja, was steht da drin?
Nein, die ist ratzputz leer.
Kennst Du ein Script, das läuft und für einen Deppen wie mich besser zu verstehen ist?? Bzw. einfacher ist???
Das ganze besteht aus vielen Dateien und ich weiß leider nicht so genau, was ich Dir schicken soll...
Gruß
Steffi
Grüße aus Berlin
Christoph S.
hallo,
hier die HP zu dem Script: http://www.planetc.de
Ich empfehle dir nochmals dringlich, dir die Forums-FAQ anzuschauen, um zu erfahren, wie du hier Links schreiben solltest. Diese Lektüre erklärt dir auch, was, wie und wieviel du aus einem vorangegangenen posting zitieren solltest.
Dieses "walk_dir" ist möglicherweise eine Funktion, die noch irgendwoanders in deinem Script definiert worden sein müßte.
Hier ist nochmal das walk_dir enthalten.
Erscheint mir als etwas umständlich, mag aber so angehen.
Und der Wert von $root_dir ist in dem von dir jetzt angegebenen Scriptausschnitt ebenfalls nicht enthalten.
Das root_dir ist in der Datei config.inc.php enthalten.
Und welchen Wert hast du dort eingetragen?
Kennst Du ein Script, das läuft und für einen Deppen wie mich besser zu verstehen ist?
Es gibt jede Menge PHP-Suchscripts im Internet. Such dir eins aus. Besser ist es allerdings, wenn du PHP lernst und dir selber eins schreibst.
Das ganze besteht aus vielen Dateien
Nein. Es sind lediglich zwei Dateien bzw. Scripts, die die gesamte "Arbeit" machen.
Schau dir nochmal diesen Teil deines Scrips an:
if (empty($cont_part)) {
$tmpl = preg_replace("=[NO_MATCH]=", $no_match, $tmpl);
} else {
$tmpl = preg_replace("=[NO_MATCH]=", "", $tmpl);
}
Der erste Teil legt fest, was das Script ausgeben soll, wenn bei der Auswertung der Eingabe kein Suchergebnis zustandekam oder die Eingabe nicht erlaubt (leer oder zuwenig Buchstaben) war. Dann soll der Wert der Variablen $no_match gemeinsam mit der eingelesenen Vorlage ausgegeben werden - und das passiert auch teilweise. $no_match wird in deiner config.inc.php mit dem Wert "keine Treffer" vorbelegt, das heißt, wenn ein "falsches" Suchwort eingegeben wird, das es auf deinen Seiten nicht gibt, soll eigentlich diese Anzeige "keine Treffer" kommen, aber stattdessen kommt Error 500. $tmpl kann bei leerem Formular oder zuwenig Buchstaben außer der eingelesenen Vorlage unterschiedliche Werte erhalten. Dann ist $no_match nicht vorhanden und es erscheint das, was du "Fehlermeldung" genannt hattest - und das passiert auch, es gibt keinen Error 500.
Der zweite Teil, nach dem "else", legt fest, was angezeigt werden soll, wenn es für den Suchbegriff irgendeine Entsprechung in deinem Webangebot gibt. Dafür wird keine Variable $no_match benötigt, aber der Inhalt der Variablen $tmpl muß die gefundenen Stellen enthalten.
Schlußfolgerung: Dort, wo deine Variable $tmpl mit dem (verarbeiteten) Wert von $search_exp gefüllt wird, muß irgendetwas "kaputt" sein. Also suche dir alle diese Stellen und schau nach, was da passieren soll. Du mußt verstehen lernen, wie dein Script arbeitet, es macht keinen Sinn, dir irgendein "funktionierendes" anderes Script anzubieten.
Grüße aus Berlin
Christoph S.
Hello,
Du mußt verstehen lernen, wie dein Script arbeitet, es macht keinen Sinn, dir irgendein "funktionierendes" anderes Script anzubieten.
sehe ich auch so.
Heißt aber auch, dass wir Steffi gerne dabei unterstützen, ein Konzept zu machen und es dann zu coden.
Als erstes mal sollte die strikte Trennung von
eingeführt werden.
Dann steigt man da nämlich auch euf einem Blick durch.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hello,
gib doch bitte mal eine Funktionsbeschreibung des Scriptes mit Deinen Worten.
Was soll das Ding denn leisten?
Es erscheint mir nämlich so, als wäre es einfacher, das Script neu zu schreiben, anstatt dieses Chaos aus Globals, Sicherheitslücken und Programmierfehlern sicher zum Laufen zu bringen.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
hallo Tom,
Es erscheint mir nämlich so, als wäre es einfacher, das Script neu zu schreiben
Das ist die bessere Idee. Es geht ziemlich kreuz und quer da zu (ich habs mir natürlich inzwischen angeschaut), man sieht sehr deutlich, daß es ein "gewachsenes" Script ist. Das heißt: der Autor hat zu einer ursprünglich kleineren Fassung immer mal irgendwas irgendwo dazugeschrieben. Daher passieren teilweise im Konfigurationsscript Dinge, die erst im "Hauptprogramm" erledigt werden sollten, und die Überschaubarkeit des Ganzen hat sehr gelitten.
Grüße aus Berlin
Christoph S.
Hello,
#################################################
Logdatei schreiben
foreach ($search_arr as $search_exp) {
$zeilen = file("./_log/search_log.txt");
$anz_zeilen = sizeof($zeilen);$x=0;
Datenfile auslesen
for ($i=0; $i<$anz_zeilen; $i++) {
list ($search_word, $search_num) = split("\|", chop($zeilen[$i]));
// wenn Suchbegriff gefunden wird
if ($search_exp==$search_word) {
$search_num++;
$i-2;
$x++;
}
$new_log .= "$search_word|$search_num\n";
}// wenn der Suchbegriff nicht schon geloggt wurde
if ($x==0) {
$search_num = "1";
$new_log .= "$search_exp|$search_num\n";
}$data = fopen("./_log/search_log.txt","w+");
flock($data,1);
fwrite($data, $new_log);
flock($data,3);
fclose($data);
unset($new_log);
}
#################################################
Woher der 500er kommt, sehe ich auch nicht auf den ersten Blick. Könnte evtl. an preg_match() liegen. Aber dass das Locking falsch ist, sehe ich auf einen Blick. Das musst Du reparieren.
Es muss der gesamte Vorgang im Schutze des Exclusive Locks stattfinden.
Sperre anfordern
Daten lesen
Daten verändern
Daten wegschreiben
Sperre aufheben
Harzliche Grüße aus http://www.annerschbarrich.de
Tom