PHP Dateinamensucher
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anzeigen
ausgabe
befehl
beispiel
beitrag
buchstabe
datei
dokument
fehler
folgender begriff
ordner
po
soeben
string
suchbegriff
suchergebnis
suchmaske
tag
test
verzeichnis
-
Hallo Leute,
Ich habe daf?r dieses Script genommen, allerdings klappt es nicht, dass er mir folgene tag/fehler">Fehlermeldung anzeigt, wenn ich auf die suchen.php klicke:
Parse error: parse error, unexpected '<' in /home/webpages/lima-city/laar/html/search.php on line 167
Und egal was ich auch eingebe er findet nie was.
?brigens habe ich das Verzeichniss so gelassen, wie im Beispiel:
// Hier werden die zu durchsuchenden Verzeichnisse festgelegt
// Beispiel: $dirs = array('./','./subdir/','./subdir/subsub/');
BSo m?ssten doch die Unterordner durchsucht werden oder nicht ?
Beitrag ge?ndert am 12.04.2006 03:48 von laar -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Ich gehe davon aus, das Script stammt von diesem Tutorial -> http://www.lima-city.de/tutorials.php?m=show&id=1452
Wenn dem so ist, musst Du folgenden Code-Abschnitt
// Wenn sie eine E-Mailbenachrichtigung eingestellt haben, wird dieser Teil an sie gesendet if($mail == true && $search != $value) { mail("$adminaddress","Suche auf $seite","Folgender Begriff wurde soeben auf der Seite $seite gesucht: \n$search\nTreffer: $found");<p><hr><p> Um die E-Mailbenachrichtigung auszuschalten, setzen sie bitte $mail auf false }
durch diesen ersetzen:
// Wenn sie eine E-Mailbenachrichtigung eingestellt haben, wird dieser Teil an sie gesendet if($mail == true && $search != $value) { mail("$adminaddress","Suche auf $seite","Folgender Begriff wurde soeben auf der Seite $seite gesucht: \n$search\nTreffer: $found\n<p><hr><p> Um die E-Mailbenachrichtigung auszuschalten, setzen sie bitte $mail auf false"); }
Die Ursache f?r den Fehler ist darauf zur?ckzuf?hren, dass ein Teil der Mail-Nachricht f?lschlicherweise nicht mitgesendet wird (sprich: sich nicht im mail()-Befehl befindet).
//edit: Code korrigiert :P *sich_sch?m*
Beitrag ge?ndert am 12.04.2006 14:03 von compactdisc -
[...]
// Wenn sie eine E-Mailbenachrichtigung eingestellt haben, wird dieser Teil an sie gesendet if($mail == true && $search != $value) { mail("$adminaddress","Suche auf $seite","Folgender Begriff wurde soeben auf der Seite $seite gesucht: \n$search\nTreffer: $found\n<p><hr><p> Um die E-Mailbenachrichtigung auszuschalten, setzen sie bitte $mail auf false }
Die Ursache f?r den Fehler ist darauf zur?ckzuf?hren, dass ein Teil der Mail-Nachricht f?lschlicherweise nicht mitgesendet wird (sprich: sich nicht im mail()-Befehl befindet).
Beitrag ge?ndert am 12.04.2006 09:50 von compactdisc
Du hast leider auch einen Fehler.
Der Parameter String wird nicht geschlossen und das Semikolon hinter "mail ()" fehlt. Au?erdem hast du anstatt der schlie?endens Klammer eine geschweifte Klammer geschrieben. Pfui compactdisc, programmier mal lieber wieder was mit PHP anstatt mit C++. :P
// Wenn sie eine E-Mailbenachrichtigung ingestellt haben, wird dieser Teil an sie gesendet if($mail == true && $search != $value) { mail("$adminaddress","Suche auf $seite","Folgender Begriff wurde soeben auf der Seite $seite gesucht: \n$search\nTreffer: $found\n<p><hr><p> Um die E-Mailbenachrichtigung auszuschalten, setzen sie bitte $mail auf false ");
MfG Lucas
-
Oh hatte vergessen von wo ich es habe ( trotzdem gut geraten ).
Also ich habe es ausprobiert, aber leider habe ich nun andere Fehler.
Notice: Undefined variable: search in /home/webpages/lima-city/laar/html/uploadervision/search.php on line 16
und
Notice: Undefined variable: wdw in /home/webpages/lima-city/laar/html/uploadervision/search.php on line 232
Ich m?chte ja das der mail nicht geschickt, aslo habe ich true durch false ersetzt, wie beschriben.
Der Fehler trat aber auch schon vorher auf.
+++++++++++++++++++++++++++++++++++++++++++++++++
search.php
<!--Diese Datei als search.php speichern//-->
<?php
ob_start();
$mtime = microtime(); $mtime = explode( ' ', $mtime); $mtime = $mtime[1] + $mtime[0];
$such_start = $mtime;
if(!function_exists('file_get_contents')) {
echo "Dieses Script erfordert PHP Version 4.3.0 oder h?her!";
exit; //Gibt eine Fehlermeldung zur?ck, wenn auf deinem Server kein PHP installiert ist
}
include("search_config.php");
//Falls kein Suchbegriff gefunden wird
$noresult = "Zu ihrem Suchbegriff <b><em>\"$search\"</em>
</b> wurde leider keine passende Datei gefunden.<br>
Versuchen sie es bitte erneut";
$minlength = "Geben Sie bitte einen Suchbegriff von mindestens ".$length."
Buchstaben L?nge ein.";
$searchtip = "<br /><br /><strong>Suchtips:</strong></p><ul>
<li>Die Eingabe von Platzhalterzeichen (*) ist nicht erforderlich.</li>
<li>Wenn Sie Ihre Suche auf ganze W?rter einschr?nken wollen, f?gen
Sie vor und nach dem Suchbegriff jeweils einen Leerschlag ein.</li></ul>";
if(isset($_POST["search"])) {
if ($_POST["search"] != "") {
$search = $_POST["search"];
$search = htmlspecialchars($search);
$search = str_replace('*','',$search);
}
if(empty($search)) {$search=$_POST[search];}
if(strlen($search) >= $length && $search != $value) {
$array = "";
$ausgabe ="";
$found = "0";
$n = "";
$e = "";
$sorthinweis = "";
echo "Sie suchten nach dem Begriff <em>\"$search\"</em> <br />\n";
// die Funktion zum Durchsuchen des Verzeichnisses:
function tree($ordner, $sub = true) {
global $ergeb;
$handle = opendir($ordner);
while (false !== ($file = readdir ($handle))) {
if($file != "." && $file != ".." && is_dir($ordner."/".$file)) {
$compl = $ordner."/".$file."/";
//echo $compl."<br>";
$ergeb = $ergeb.",".$compl;
tree($ordner."/".$file, TRUE);
}
}
closedir($handle);
}
if ($alledirs) {
tree(".");
$ergeb = "./".$ergeb;
$dirs = explode (",", $ergeb);
}
foreach($dirs as $dir) {
$verz = opendir($dir);
while($file = readdir($verz)) {
// Mit dieser Funktion schliessen sie einzelne Dateien von der Suche aus
if(!in_array($file,$exclude_files) && preg_match("=(\.$dat_type)$=",$file)) {
$string = file_get_contents($dir.$file);
$string = html_entity_decode($string);
foreach($exclude_strings as $k) $string = str_replace($k,"",$string);
//Die nachfolgenden Zeilen lesen die Meta-Tags der gefunden Dokumente aus
$del_start = '<meta name="description" content="';
$del_end = '"';
$pos=strpos(strtolower($string),$del_start) + strlen($del_start);
$substring_rest = substr($string,$pos);
$end_pos=strpos($substring_rest,$del_end);
$description = substr($substring_rest,0,$end_pos);
//Die kommenden Zeilen werten die Keywordtags aus
$del_start = '<meta name="keywords" content="';
$del_end = '"';
$pos=strpos(strtolower($string),$del_start) + strlen($del_start);
$substring_rest = substr($string,$pos);
$end_pos=strpos($substring_rest,$del_end);
$keywords = substr($substring_rest,0,$end_pos);
// Diese Zeile wertet den <title>-tag aus; Der Titel wird im Suchergebnis angezeigt
$del_start = '<title>';
$del_end = '</title>';
$pos=strpos($string,$del_start) + strlen($del_start);
$substring_rest = substr($string,$pos);
$end_pos=strpos($substring_rest,$del_end);
$titel = substr($substring_rest,0,$end_pos);
// Die kommenden Zeilen zeigen die Metatags der gefunden Dokumente an
if ($key) $string=$string.$keywords;
if ($desc) $string=$string.$description;
if ($tit) $string=$string.$titel;
if ($limit_start != "") {
$pos=strpos($string,$limit_start) + strlen($limit_start);
$substring_rest = substr($string,$pos);
}
else {
$substring_rest = $string;
}
if ($limit_end != "") {
$end_pos=strpos($substring_rest,$limit_end);
$string = substr($substring_rest,0,$end_pos);
}
else {
$string = $substring_rest;
}
//Inhalt von tags auswerten:
if ($tags==false) $string = strip_tags($string);
$string = ereg_replace("\n", "", $string);
// jetzt die Ausgabe des Kontext vorbereiten:
$stringlow = strtolower($string);
$searchlow = strtolower($search);
$test = substr_count($stringlow, $searchlow);
if(!empty($test)) {
$pos=strpos($stringlow,$searchlow);
$piece1 = strip_tags(substr($string,$pos-$vor,$vor));
$piece2 = strip_tags(substr($string,$pos+strlen($search),$nach));
$rest = "$piece1<strong>$search</strong>$piece2";
if($vor=="0" && $nach=="0") $rest = "";
if($filename) $titel = $file;
if($titel == "") $titel = $file;
if($titel != "") {
//$array .= '['.$test.'] <a href="'.$dir.$file.'">'.$titel.'</a><br />'.$rest.'<br /><br />';
$array .= "[".$test."] <a href=\"".$dir.$file."\">".$titel."</a><br />".$rest."<br /><br />\n";
$found ++;
$link = $file; //Dieser Link wird im Suchergebnis angezeigt
}
}
}
}
closedir($verz);
}
// Wenn sie eine E-Mailbenachrichtigung ingestellt haben, wird dieser Teil an sie gesendet
if($mail == false && $search != $value) {
mail("$adminaddress","Suche auf $seite","Folgender Begriff wurde
soeben auf der Seite $seite gesucht: \n$search\nTreffer: $found\n<p><hr><p>
Um die E-Mailbenachrichtigung auszuschalten, setzen sie bitte $mail auf false
");
}
// Die folgenden Zeilen schreiben ein ein Logfile
$today = date("d.m. H:i ");
//$nl = $today.$_POST["search"] ;
$nl = html_entity_decode($today.$_POST["search"])."(".$found.")\n";
if($fp = fopen('verwendete_suchbegriffe.txt', 'a+')) {
// falls die Logdatei nicht existiert, wird versucht, sie anzulegen.
flock($fp, LOCK_EX | LOCK_NB) or die("Die Logdatei kann derzeit nicht ver?ndert werden.");
//flock($fp,2) or die("Die Logdatei kann derzeit nicht ver?ndert werden");
fwrite($fp, $nl);
fclose($fp);
}
//Bei keinen Suchresultaten:
if($found == "0") {
echo $noresult;
}
//Falls eine Datei - direkt zu ihr
if($found == "1" && $jump == true) {
header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/".$link);
exit;
}
//Falls mehrere Dateien gefunden wurden
if($found > "1") {
$n = "n"; $e = "e";
if($treffer) {
$sorthinweis = "<br />Sortiert nach [Anzahl der Treffer pro Dokument].";
}
}
if($found >= "1") {
echo "Es wurde$n <b><strong>$found</strong></b> Dokument$e gefunden.$sorthinweis";
echo "<br /><br />";
$array = explode("\n", $array);
natsort($array);
reset($array);
$array = array_reverse($array);
while(list($line_num, $line) = each($array)) {
if($treffer) {
$ausgabe .= "$line\n";
} else {
$ausgabe .= substr(strstr($line, '] '),2)."\n";
}
}
print $ausgabe;
}
}
else {echo $minlength;}
}
else {echo $minlength;}
echo $searchtip;
$mtime = microtime(); $mtime = explode( ' ', $mtime); $mtime = $mtime[1] + $mtime[0];
$such_ende = $mtime;
$time_gesamt = $such_ende - $such_start;
if(isset($found)) {
echo "<div id='searchfooter'><p>Suche in ".number_format($time_gesamt,2,',','.')." Sekunden ausgef?hrt</p></div>";
} else {
echo "<div id='searchfooter'><p>Suchscript $wdw</p></div>";
}
?>
++++++++++++++++++++++++++++++++++++++++++++++++++++
suchen.php
<!--Diese Datei als suchen.php abspeichern, sie liefert die Suchergebnisse//-->
<html>
<title>Suchergebnisse</title>
<?php ob_start(); ?>
<a>Suchergebnisse</a>
<!--Eingabeformular//-->
<form id="search" method="post" action="suchen.php">
<p><label for="suchbegriff">Im Projekt suchen:</label>
<input type="text" name="search" id="suchbegriff" value="Suchbegriff" size="13" title=" Suchbegriff hier eingeben " onblur="if(this.value=='')this.value='Suchbegriff';" onfocus="if(this.value=='Suchbegriff')this.value='';" />
<input type="submit" value="Suchen" />
</p>
</form>
<div id="output">
<p><?php include("search.php");?> <!--include Befehl; ?ffnet die Suchergebnisse//-->
</div>
<!--
<?php
# --><p>Dein Server unterst?tzt kein PHP!</p><!--
?>
-->
</html>
+++++++++++++++++++++++++++++++++++++++++++
suchmaske.php
!--Diese Datei als suchmaske.php speichern//-->
<html>
<!--Diese Datei ist lediglich als Suchmaske gedacht//-->
<title>Dateisuche</title>
<!--Suchformular//-->
<center><form id="search" method="post" action="suchen.php">
<p><label for="suchbegriff">Suchbegriff:</label><p>
<input type="text" name="search" id="suchbegriff" value="Suchbegriff" size="13" title=" Suchbegriff hier eingeben "
onblur="if(this.value=='')this.value='Suchbegriff';" onfocus="if(this.value=='Suchbegriff')this.value='';" /><br>
<input type="submit" value="Suchen" />
</p>
</form></center>
</html>
++++++++++++++++++++++++++++++++++++++++++++++
search_config
<?php
//In dieser Datei werden die Suchoptionen bestimmt
error_reporting(E_ALL);
// Falls sie eine E-Mailbenachrichtigung w?nschen, die nachfolgenden Zeilen ?ndern
$mail = false;
// true f?r E-Mail Benachrichtigung, false, falls keine E-Mail Benachrichtigung gew?nscht.
$adminaddress = "ihre@email.de";
// an diese Adresse geht die E-Mail
$seite = "Suchbegriffe";
// wird im E-Mail Betreff und Text angegeben
//Von hier an sind optionale Einstellungen zu t?tigen
// Die unten angegeben Dateiendungen werden von der Suche ber?cksichtigt
// Dateiendungen m?ssen durch Pipe "|" getrennt werden
$dat_type = "jpg|bmp|gif|tga|png";
$value = "Suchbegriff";
// Legt die Mindestl?nge des Suchbegriffes fest
$length = 5;
// Hier werden die zu durchsuchenden Verzeichnisse festgelegt
// Beispiel: $dirs = array('./','./subdir/','./subdir/subsub/');
$alledirs = true;
// Falls du nur das aktuelle Verzeichnis durchsuchen lassen m?chtest,
//setze hier false (Verringert die Suchzeit)
// Diese Dateien werden von der Suche ausgeschlossen:
$exclude_files = array('search.php','search_config.php','searchlog.txt','suchmaske.php');
// Wichtig: Hier m?ssen die Dateien dieses Scripts sein!!!
// Hier wird festegelegt ob in den Suchergebnissen der Dateiname
//oder der Dateititel ausgegeben wird
$filename = true;
//true, wenn immer filename ausgegeben werden soll.
//false, wenn title-tag ausgegeben werden soll.
//wenn die Datei kein title-tag oder ein leeres title-tag enth?lt,
//wird in jedem Fall filename ausgegeben.
// Hier wird festgelegt, welche Tags bei der Suche ber?cksichtig werden sollen
$key = true;
//true, wenn das meta tag keywords durchsucht werden soll, andernfalls false
$desc = true;
//true, wenn das meta tag description durchsucht werden soll, andernfalls false
$tit = true;
//true, wenn das meta tag title durchsucht werden soll, andernfalls false
$tags = true;
//true, wenn alle tags durchsucht werden sollen, andernfalls false
// Erst ab dem ersten vorkommen dieses Strings werden die Dateien durchsucht...
// damit lassen sich z.B. header, Men?s, include files etc. recht gut ausschlie?en
// hier bieten sich z.B an: '<h1> oder '<body>'
// wenn der $limit_start nicht im Dokument vorkommt,
// wird das Dokument von Anfang an durchsucht!
$limit_start = "";
// ... bis zu diesem String durchsuchen
// damit lassen sich z.B. footer ausschlie?en
$limit_end = "";
// unerw?nschte Strings von der Suche ausschlie?en
$exclude_strings = array('Nichtfinden','externer Link:');
//Von hier an wird das Ausgabeformat des Suchergebnisses bestimmt
// so viele Buchstaben vor dem Treffer anzeigen:
$vor = 20;
// so viele Buchstaben nach dem Treffer anzeigen:
$nach = 20;
// wenn sowohl $vor als auch $nach auf 0 gesetzt wird, wird KEIN Kontext angezeigt,
// sondern nur der Link zur Datei mit dem Treffer
$jump = false; // Wenn hier "true" steht wird bei nur einem Suchergebnis dieses direkt angezeigt
// Anzahl der Treffer anzeigen:
$treffer = true; // $treffer = false; einsetzen, wenn Anzahl der Treffer nicht angezeigt werden soll.
// Anmerkung: Tags, die in <> eingeschlossen sind, werden NICHT durchsucht.
// dies gilt auch f?r html Kommentare, die mit <!-- Kommentare --> ausgezeichnet sind.
?>
_______________________________________________
Vielleicht findet Ihr ja noch mehr Fehler.
Danke schon mal La ?r -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage