Eigene Website durchsuchen

In dem du die Variable die von der <textarea> übergeben bekommst, einfach mit explode() bearbeitest.
Ein Trennzeichen bei Zeilenumbrüchen wäre wohl \n .
 
Flex hat gesagt.:
In dem du die Variable die von der <textarea> übergeben bekommst, einfach mit explode() bearbeitest.
Ein Trennzeichen bei Zeilenumbrüchen wäre wohl \n .
Jetzt verstehe ich nur Bahnhof. Liegt daran, dass ich nicht so viel von PHP verstehe...

Kannst du vllt einfach mal die Änderung hier vornehmen?
PHP:
<?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");

// 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>


<?php
  $search=FormatSearchString(stripslashes($_POST['p_search']));
?>


<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%><input type="text" name="p_search" size=40 maxlength=250 value="<?php echo $search; ?>"></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

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>
 
Naja, es ist wahrscheinlich extrem ressourcenfressend so wie ich es jetzt löse, aber ich habe keine wirkliche Motivation mich da hineinzuarbeiten und vielleicht bist du ja über eine schlechte Lösung glücklicher als über gar keine.

PHP:
<?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>

Funktioniert, gibt allerdings für jedes Suchwort eine eigene Ergebnisanzeige aus...
 
Flex hat gesagt.:
Naja, es ist wahrscheinlich extrem ressourcenfressend so wie ich es jetzt löse, aber ich habe keine wirkliche Motivation mich da hineinzuarbeiten und vielleicht bist du ja über eine schlechte Lösung glücklicher als über gar keine.




Funktioniert, gibt allerdings für jedes Suchwort eine eigene Ergebnisanzeige aus...

Hm... Danke für deine Mühe! Aber das bringts ja nicht wirklich. Es soll schon so sein, dass Seiten angezeigt werden, die halt die eingegebenen Suchbegriffe enthalten...
 
Fleck06 hat gesagt.:
Hm... Danke für deine Mühe! Aber das bringts ja nicht wirklich. Es soll schon so sein, dass Seiten angezeigt werden, die halt die eingegebenen Suchbegriffe enthalten...
Ja, aber wir sehen uns ja hier eher als eine Art Hilfe zur Selbsthilfe ;)

Für deine Art der Anfrage, wäre vielleicht das nicht-kommerzielle Job-Forum geeignet.
 
Hallo guenter..

ich verstehe dein Problem nicht ganz.
Ein bisschen Informationen wären schon gut.
Du hast keine Datenbank. Wie hast du deine Suche aufgebaut und was macht sie.

Grüße SimonErich
 
Sorry...

Es sieht folgendermassen aus:

Die gesamte Seite ist als "frame"-Seite aufgebaut, jedoch ohne Frames, sondern mit php-code erzeugt.
Die Links werden mit $_GET Parametern übergeben, die Abfrage erfolgt über switch...case.
Durch das includen der Dateien können Sie nun natürlich nicht direkt aufgerufen werden, da sie ja keine Kopf-Angaben wie Stylesheets usw. haben.

Code:
<!--Die Datei index.php -->

<!--HTML-Code-->
<table>
  <tr>
    <td>
    <a href="index.php?path=seite1">Zur Seite 1</a>
    <a href="index.php?path=seite2">Zur Seite 2</a>
    </td>
    <td>

<!--PHP-Code-->
<?php

if (isset($_GET['path'])) {
    switch($_GET['path']) {
        case 'seite1':
        include 'phpsites/seite1.php';
        break;
        case 'seite2':
        include 'phpsites/seite2.php';
        break;
    }
}
?>
<!--EndePHP-Code-->
    </td>
  </tr>
</table>

Die Suchmaschine findet nun aber die Datei
"www.meineseiten.de/phpsites/seite2.php", welche natürlich dann nach dem Anklicken nicht in der rechten Spalte der Tabelle angezeigt wird und die Navigation sowie der Dateikopf weg sind.

Also muss ich doch irgendwie einen Link schaffen, der die richtige Seite anhand des $_GET parameters ins "Frame" einbettet.
Der Link müsste natürlich heissen http://www.meineseite.de/index.php?path=seite1 ...

Der benötigte $_GET parameter ist immer gleich, man muss also nur die Variable richtig zuweisen. Ich hoffe du verstehst mein Problem, da ich irgendwie nicht weis, wie ich das zustande bringen soll.

Ciao
Günni
 
Zuletzt bearbeitet:
Zurück