mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 19.04.2024 10:48 Benutzername: Passwort: Auto-Login

Thema: PHP-Suchscript Modifikation vom 05.07.2011


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> PHP-Suchscript Modifikation
Seite: 1, 2  Weiter
Autor Nachricht
KobraPatron
Threadersteller

Dabei seit: 09.01.2011
Ort: Nürnberg
Alter: 43
Geschlecht: Männlich
Verfasst Di 05.07.2011 22:00
Titel

PHP-Suchscript Modifikation

Antworten mit Zitat Zum Seitenanfang

Hallo PHP-Experten.

ich habe den unten aufgeführten Code im Internet gefunden. Der ist fast perfekt, aber zwei Punkte stören mich noch etwas dabei.

1. Wenn die Eingabe leer, dann Fehlermeldung ausgeben

2. nicht mehr als 10 Suchergenisse ausgeben

Theoretisch kenne ich den Ansatz, aber da ich mit PHP absolut wenig zu tun habe und auch nicht tiefer in die Materie einsteigen kann/ will, wäre ich über jede Hilfe sehr dankbar.

Gruß
Kobra








<?php

// #####################
// ### PHP-Suche 1.3 ###
// #####################

// *********************
// *** Einstellungen ***
// *********************

// Domain-Name für die Anzeige in den Resultaten
// z.B. "http://www.gaijin.at"
$DomainName="http://".$_SERVER['SERVER_NAME'];

// Root-Verzeichnis für den Zugriff auf die Dateien am Server
// Beispiel: $RootDir=dirname("/htdocs");
$RootDir=dirname($_SERVER['SCRIPT_FILENAME']);

// Dateiname für die Protokollierung der Suchbegriffe
// (kein Dateiname zum deaktivieren der Protokollierung)
// z.B. "../../files/logs/search_words.log"
$SearchWordLog="";

// Beschreibung anzeigen ("true" für ja, "false" für nein)
$Show_Description=true;

// Teile des Inhalts anzeigen ("true" für ja, "false" für nein)
$Show_Content=true;

// Länge der Textfragmente um die Fundstellen (in Zeichen)
$Found_Piece_Len=50;

// Dateinamen anzeigen ("true" für ja, "false" für nein)
$Show_Filename=true;

// Dateigröße anzeigen ("true" für ja, "false" für nein)
$Show_Filesize=true;

// Nummer des Resultates anzeigen ("true" für ja, "false" für nein)
$Show_ResultNumber=true;

// Erlaubte Verzeichnisse als Array, getrennt mit einem Beistrich
// Z.B.: $AllowedDirs=array($RootDir,$RootDir."/hilfe",$RootDir."/infos");
$AllowedDirs=array($RootDir);

// Erlaubte Erweiterungen als Array, getrennt mit einem Beistrich
// Z.B.: $AllowedExts=array(".php",".php3",".php4",".htm",".html",".ihtml",".shtm",".shtml",".txt");
$AllowedExts=array(".php",".html",".shtml",".txt");

// Deutsche Umlaute dekodieren (dadurch wird beispielsweise "&auml;" zu "ä")
$Activate_Umlaut=true;

// *********************

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Suche</title>

<meta name="title" content="Suche">
<meta name="author" content="Gaijin">
<meta name="publisher" content="Gaijin">
<meta name="robots" content="noindex,nofollow">
<meta http-equiv="content-language" content="de-at">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel=stylesheet type="text/css" href="search.css">

</head>
<body>



<h4>Suche</h4>

<table border="0" cellspacing="0" cellpadding="1"><tr><form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"><td id="border3d">
<table border="0" cellspacing="0" cellpadding="5"><tr><td id="back3d">

<table border="0" cellspacing="0" cellpadding="2">
<tr><td nowrap align=right id="formtext">Suche:&nbsp;</td>
<td width=100%><textarea name="p_search"><?php echo stripslashes($_POST['p_search']); ?></textarea></td></tr>

<tr><td nowrap align=right>&nbsp;</td>
<td width=100% id="formtext"><input type="submit" value="Suchen" name="submit">&nbsp;&nbsp;&nbsp;<small>(mit UND-Verknüpfung)</small></td></tr>

</td></tr>
</table>

</td></tr></table>
</td></form></tr></table>

<small><b>PHP-Suche</b><br>Powered by <a href="http://www.gaijin.at/">www.gaijin.at</a></small><br>

<br>

<?php
$temp = explode("\n",$_POST['p_search']);

for($i = 0; $i < count($temp); $i++) {

$search=FormatSearchString(stripslashes($temp[$i]));


if(!$search) exit;

// Protokollierung der Suchbegriffe
if(file_exists($SearchWordLog)) {
$fp=@fopen($SearchWordLog,"a");
if($fp) {
flock($fp,2);
fputs($fp,$search."\r\n",256);
flock($fp,3);
fclose($fp);
}
}

echo "<h4>Ergebnis:</h4>\n";

$files=ReadDirs($AllowedDirs,$AllowedExts);

$ResultCount=0;
if($files && $search){
foreach($files as $f){
if(SearchFile($f,$search)){
$fn=$f;
if(substr($f,0,strlen($RootDir))==$RootDir) $fn=$DomainName.substr($f,strlen($RootDir));
$ResultCount++;
if($Show_ResultNumber) echo $ResultCount.". ";
echo "<a href=\"".$fn."\"><b>".$Site_Title."</b></a><br>\n";
if($Meta_Description) echo $Meta_Description."<br>\n";
if($Site_Content) echo "<span id=small><span id=grey>".$Site_Content."</span></span><br>\n";
if($Show_Filename) echo "<span id=grey>Datei:</span> <span id=green>".$fn."</span>";
if($Show_Filesize){
if($Show_Filename) echo " - ";
echo "<span id=grey>Größe:</span> <span id=green>".round(filesize($f)/1024,2)." KB</span>";
}
if($Show_Filename || $Show_Filesize) echo "<br>";
echo "<br>\n";
}
}
clearstatcache();
}
echo "Es wurden <b>".$ResultCount."</b> Seiten gefunden.<br>\n";
echo "<p><small><b>PHP-Suche</b><br>Powered by <a href=\"http://www.gaijin.at/\">www.gaijin.at</a></small></p>\n";
}
function SearchFile($url,$search){
global $Show_Description;
global $Found_Piece_Len;
global $Activate_Umlaut;

global $Site_Title;
global $Site_Content;
global $Meta_Description;
global $Meta_Robots;

$Site_Title="";
$Site_Content="";
$Meta_Description="";
$Meta_Robots="";

// *** Meta-Angaben ermitteln ***
$gmtarray=get_meta_tags($url);
while(list($key,$val)=each($gmtarray)){
switch(strtolower($key)){
case "title": $Meta_Title=$val; break;
case "keywords": $Meta_Keywords=$val; break;
case "description": $Meta_Description=$val; break;
case "robots": $Meta_Robots=strtolower($val); break;
case "revisit": $Meta_Revisit=strtolower($val); break;
case "revisit-after": $Meta_RevisitAfter=strtolower($val); break;
}
}
if(!$Show_Description) $Meta_Description="";
if(eregi("noindex",$Meta_Robots)) return false;

// *** Dateiinhalt einlesen (bzw. Ausgabe bei PHP) ***
$fp=@fopen($url,"r");
if(!$fp) return false;
while(!feof($fp)){
$content.=fgets($fp,10240);
}
fclose($fp);
$content=str_replace("<?","<",$content);
$content=str_replace("?>",">",$content);
$content=trim($content);
$content=$Site_Title." ".$Meta_Title." ".$Meta_Keywords." ".$Meta_Description." ".$content;

// *** Seitentitel ermitteln ***
$Site_Title=GetSiteTitle($content);
if(!$Site_Title) $Site_Title=$Meta_Title;
if(!$Site_Title) $Site_Title=basename($url);

if(substr($content,0,strlen($Site_Title))==$Site_Title) $content=substr($content,strlen($Site_Title));
$content=strip_tags($content);
$content=str_replace("\n"," ",$content);
$content=str_replace("\r","",$content);
$sc=" ".trim($content);

while(strpos($sc," ")){
$sc=str_replace(" "," ",$sc);
}
$content=$sc;

// Deutsche Umlaute konvertieren
if($Activate_Umlaut){
$content=str_replace("&auml;","ä",$content);
$content=str_replace("&ouml;","ö",$content);
$content=str_replace("&uuml;","ü",$content);
$content=str_replace("&Auml;","Ä",$content);
$content=str_replace("&Ouml;","Ö",$content);
$content=str_replace("&Uuml;","Ü",$content);
$content=str_replace("&szlig;","ß",$content);
}
$content=str_replace("&euro;","€",$content);

// *** Suchen ***
$found=false;
$a=explode(" ",strtolower($search));
$lowcontent=strtolower($content);
foreach($a as $arg){
$p0=strpos($lowcontent,$arg);
if($p0>0){
$p1=$Found_Piece_Len;
$p2=$Found_Piece_Len;
if(($p0-$p1)<0) $p1=$p0;
$result_text.="...".substr($content,$p0-$p1,$p1)."<b id=red>";
$result_text.=substr($content,$p0,strlen($arg))."</b>".substr($content,$p0+strlen($arg),$p2);
$found=true;
}else{
$found=false;
break;
}
}

if(!$found) return false;
if($result_text) $result_text.="...";

$Site_Content=$result_text;

return true;
}

function FormatSearchString($search){
$chars=".:-_,;!§$%&/()=#+*~'?\[|]{^°}²³µ@€ äöüß1234567890abcdefghijklmnopqrstuvwxyz";
for($i=0;$i<strlen($search);$i++){
$a=substr($search,$i,1);
if(stristr($chars,$a)) $s.=$a;
}
while(strpos($s," ")){
$s=str_replace(" "," ",$s);
}
return trim($s);
}

function ReadDirs($DirArray,$ExtArray){
$fileArray=array();
foreach($DirArray as $d){
if($hDir = opendir($d)){
while($file=readdir($hDir)){
if(!is_dir($d."/".$file)){
// *** .*-Dateien (zB .htaccess) ignorieren ***
if(substr($file,0,1)!="."){
foreach($ExtArray as $ext){
if(substr(strtolower($file),strlen($file)-strlen($ext),strlen($ext))==strtolower($ext)){
array_push($fileArray,$d."/".$file);
continue;
}
}
}
}
}
closedir($hDir);
}
}
return $fileArray;
}

function GetSiteTitle($content)
{
$p1=strpos(strtolower($content),"<title>");
if(!$p1) return false;
$p2=strpos(strtolower($content),"</title>",$p1);
if(!$p2) return false;
return trim(substr($content,$p1+7,$p2-$p1-7));
}

?>




</body>
</html>


Zuletzt bearbeitet von KobraPatron am Di 05.07.2011 22:01, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
pRiMUS

Dabei seit: 09.09.2003
Ort: Vienna
Alter: 48
Geschlecht: Männlich
Verfasst Mi 06.07.2011 08:58
Titel

Antworten mit Zitat Zum Seitenanfang

und was hast du schon versucht? wir bieten hier hilfe zur selbsthilfe. ansonsten darfst du dir gerne jemanden suchen, der sich gegen vergütung dein problem anschauen möchte.

btw: verwende die CODE tags vom forum, damit man deinen kram auch vernünftig formatiert lesen kann. das schaut sich so doch niemand an.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
KobraPatron
Threadersteller

Dabei seit: 09.01.2011
Ort: Nürnberg
Alter: 43
Geschlecht: Männlich
Verfasst Mi 06.07.2011 16:38
Titel

Antworten mit Zitat Zum Seitenanfang

pRiMUS hat geschrieben:
und was hast du schon versucht? wir bieten hier hilfe zur selbsthilfe. ansonsten darfst du dir gerne jemanden suchen, der sich gegen vergütung dein problem anschauen möchte.

btw: verwende die CODE tags vom forum, damit man deinen kram auch vernünftig formatiert lesen kann. das schaut sich so doch niemand an.


Versucht habe ich schon jede Menge, bekomme aber immer einen Parse-Error.

Der Bereich, der Fett markiert ist, ist den entscheidende Teil. Von der Theorie her relativ simpel, aber da ich mich einfach in der Programmiersprache nicht wirklich auskenne, mache ich wahrscheinlich in der Syntax einiges verkehrt.

So etwa:

If INPUT-TEXT == "" {
ECHO "Zeige diese Fehlermeldung an";
Break (hier ABBRUCH und code nicht mehr weiter ausführen)
}



$Schleife = 0;

while $Schleife <= 10
{

weiteren CODE ausführen
weiteren CODE ausführen
weiteren CODE ausführen
weiteren CODE ausführen

$Schleife++:
}


so stelle ich mir das vor, aber kann es nicht auf den o.g. Code implementieren. Hab mich schon etwas länger damit beschäftigt.

Danke und gruß
kobra


Zuletzt bearbeitet von KobraPatron am Mi 06.07.2011 16:39, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
immerIch

Dabei seit: 19.10.2010
Ort: #mein{display:block}
Alter: 35
Geschlecht: Männlich
Verfasst Mi 06.07.2011 16:41
Titel

Antworten mit Zitat Zum Seitenanfang

im Grunde müsste es nach dem Schema ablaufen:

Code:

if(isset($_POST['p_search']){

   if(empty($_POST['p_search'])){
        echo "Bitte Suchwort eingeben!";
   } else {
        //Füre weiteren Code aus
   }

}


Zuletzt bearbeitet von immerIch am Mi 06.07.2011 16:43, insgesamt 2-mal bearbeitet
  View user's profile Private Nachricht senden
pantonine

Dabei seit: 03.03.2011
Ort: gehen Sie bitte weiter…
Alter: -
Geschlecht: -
Verfasst Mi 06.07.2011 21:17
Titel

Antworten mit Zitat Zum Seitenanfang

- Das Script ist aus dem letzten Jahrhundert (register_globals)
- Das Prinzip ebenso (Suche in statischen Dateien, statt Verwaltung der Inhalte in einer Datenbank)
[edit] Der Umganmg mit Umlauten/Zeichensätzen ist auch besonders exotisch

Kann man nur von abraten.


Zuletzt bearbeitet von pantonine am Mi 06.07.2011 21:19, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
KobraPatron
Threadersteller

Dabei seit: 09.01.2011
Ort: Nürnberg
Alter: 43
Geschlecht: Männlich
Verfasst Mi 06.07.2011 23:51
Titel

Antworten mit Zitat Zum Seitenanfang

immerIch hat geschrieben:
im Grunde müsste es nach dem Schema ablaufen:

Code:

if(isset($_POST['p_search']){

   if(empty($_POST['p_search'])){
        echo "Bitte Suchwort eingeben!";
   } else {
        //Füre weiteren Code aus
   }

}


Jetzt wo du mir geholfen hast, konnte ich den Vorgang auch - nach etwas Recherche - sehr gut nachvollziehen.


Vielen Dank.
  View user's profile Private Nachricht senden
KobraPatron
Threadersteller

Dabei seit: 09.01.2011
Ort: Nürnberg
Alter: 43
Geschlecht: Männlich
Verfasst Mi 06.07.2011 23:55
Titel

Antworten mit Zitat Zum Seitenanfang

pantonine hat geschrieben:
- Das Script ist aus dem letzten Jahrhundert (register_globals)
- Das Prinzip ebenso (Suche in statischen Dateien, statt Verwaltung der Inhalte in einer Datenbank)
[edit] Der Umganmg mit Umlauten/Zeichensätzen ist auch besonders exotisch

Kann man nur von abraten.


für meine Sache ist es absolut ausreichend. Es wird sicher bessere Möglichkeiten geben, aber dazu bin ich nicht in der Lage ;(
  View user's profile Private Nachricht senden
pantonine

Dabei seit: 03.03.2011
Ort: gehen Sie bitte weiter…
Alter: -
Geschlecht: -
Verfasst Do 07.07.2011 00:00
Titel

Antworten mit Zitat Zum Seitenanfang

Wenn Du meinst, später alle auto registers umstellen zu können (viel Spaß dann mit PHP5!) und Dich mit Zeichensatzproblem rumschlagen willst - tu Dir keinen Zwang an.
  View user's profile Private Nachricht senden
 
Ähnliche Themen Suchscript
Js Lightbox Modifikation
Ebenen in Datei exportieren + Modifikation
Neues Thema eröffnen   Neue Antwort erstellen Seite: 1, 2  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.