Suchmaschinenskript auf Xampp

Alles, was PHP betrifft, kann hier besprochen werden.

Suchmaschinenskript auf Xampp

Postby Sabine86 » 24. January 2008 08:16

Hallo zusammen,

ich bin neu hier im Forum und hätte gleich mal eine Frage. Undzwar habe ich mir ein Suchmaschinenscript (PHP) runtergeladen und möchte dieses über Xampp zum Laufen bringen.

Das Script besteht lediglich aus folgender Datei suchen.php:

Code: Select all
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
   <title>PHP-Suchmaschine</title>
   <style>
   body,td,input { font-family:Verdana;font-size:7.9pt }
   .t_nummer { font-family:Verdana,Tahoma,Arial; font-size:16pt; font-weight:bold; color:#999999}
   .markierung {color:#ff0000}
   </style>
</head>

<body>

<?
// error_reporting(0);
########### PHP-Suchmaschine ###########
########### powered by Viktor Widiker & http://www.widiker.de, Berlin 2002 ###########

########### Hier folgen die Einstellungen ###########

$max_suchwoerter=3; # Maximale Anzahl der Suchwörter, die wahrgenommen werden

$treffer_pro_seite=10; # Wie viele Treffer werden pro Ergebnisseite angezeigt?

$endungen=array("html","htm","php","phtml"); # Dateien mit welchen Endungen werden durchsucht?

$pfade_gesamt="./"; # Adressen (relativ zum Suchmaschinennskript) der zu durchsuchenden Ordner (durch Kommata trennen!)

$max_stelle=200; # Maximale (ungefähre) Länge (in Zeichen) der ersten gefundenen Textstelle

$mehr_laenge=200; # Maximale (ungefähre) Länge (in Zeichen) des Strings für weitere Vorkommnisse

########### Ab hier folgt die Suche #######
// Umstellung auf reg_glo=Off Anfang
$PHP_SELF = $_SERVER['PHP_SELF'];
$SERVER_NAME = $_SERVER['SERVER_NAME'];
// $SERVER_NAME = "http://www.domain.de/ordner";
foreach($_POST as $key => $value) {
  $$key = isset($_POST[$key]) ? $_POST[$key] : "";
}
foreach($_GET as $key => $value) {
  $$key = isset($_GET[$key]) ? $_GET[$key] : "";
}
// Umstellung auf reg_glo=Off ENDE

if (!isset($grossschreibung)) { $grossschreibung=0; }
if (!isset($ganzewoerter)) { $ganzewoerter=0; }
if (!isset($index)) { $index=0; }

$suchtext=trim(stripslashes($suchtext));
if ($grossschreibung==0) { $suchtext=strtolower($suchtext); }
$suchtext=ereg_replace(","," ",$suchtext);
$suchtext2=array(); $suchwoerter=array();
$suchtext2=explode(" ",$suchtext);
foreach ($suchtext2 as $einwort)
{
if (($einwort!="") && (count($suchwoerter)<=($max_suchwoerter-1)) && (!in_array($einwort,$suchwoerter)))
{ array_push($suchwoerter,$einwort); }
}
$suchtext=implode(" ",$suchwoerter);
?>

<form action="<? echo "$PHP_SELF"; ?>" method="post">
<table width="500" cellpadding="5" cellspacing="0" border="0" bgcolor="#ccddee" align="center">
<tr>
<td align="right">
<?
echo "<input type=\"text\" name=\"suchtext\" size=\"";
$browser=$HTTP_USER_AGENT;
if (1*strpos(strtolower($browser),"msie")>0) { echo "25"; } else { echo "14"; }
echo "\" value=\"".$suchtext."\"><br><br>";
?>
<input type="submit" value=" suchen ">
</td>
<td>
<b>Groß- und Kleinbuchstaben</b><br>
<input type="radio" name="grossschreibung" value="1" <? if ($grossschreibung==1) echo "checked"; ?>>unterscheiden<br>
<input type="radio" name="grossschreibung" value="0" <? if ($grossschreibung==0) echo "checked"; ?>>nicht unterscheiden
</td>
<td>
<b>Art der Suche</b><br>
<input type="radio" name="ganzewoerter" value="1" <? if ($ganzewoerter==1) echo "checked"; ?>>nur ganze Wörter<br>
<input type="radio" name="ganzewoerter" value="0" <? if ($ganzewoerter==0) echo "checked"; ?>>Wortteile
</td>
</tr>
</table>
</form>

<?
if ($suchtext!="") { start(); ausgabe(); }

function start()
{
global $suchwoerter,$grossschreibung,$ganzewoerter,$dateinummer,$treffer,$max_stelle,$mehr_laenge;
global $endungen,$pfade_gesamt;
$dateinummer=0;
$treffer=array();
$pfade=array(); $pfade=explode(",",$pfade_gesamt);
   foreach ($pfade as $pfad)
   {
   $ordner=opendir($pfad);
      while ($eintrag=readdir($ordner))
      {
      $name=$pfad.$eintrag;
      $dateiname=explode(".",$eintrag);
      if (in_array($dateiname[1],$endungen))
         {
         $anzahl=0;
         $schluss=0;
         $gefundene_woerter=array();
         $datei=fopen($name,"r");
            while (!feof($datei))
            {
            $zeile=fgetss($datei,10000,"");
            if ($grossschreibung==0) { $zeile=strtolower($zeile); }
            
            $woerter=explode(" ",$zeile);
            foreach ($woerter as $wort)
            {
            foreach ($suchwoerter as $suchwort)
               {
               ### ganze Wörter ###
               if ($ganzewoerter==0)
                  {
                  if (strstr($wort,$suchwort))
                     {
                     if (!in_array($suchwort,$gefundene_woerter)) { array_push($gefundene_woerter,$suchwort); }
                     $anzahl++;
                     $treffer["vorkommnisse"][$dateinummer]++;
                     if ($anzahl==1)
                        {
                        $treffer["datei_url"][$dateinummer]=$name;
                        
                        $position=strpos($zeile,$wort);
                        $wortlaenge=strlen($wort);
                        $zeilenlaenge=strlen($zeile);
                        if ($zeilenlaenge>$max_stelle)
                           {
                           $lside=$position-(($max_stelle-$wortlaenge)/2);
                           $rside=$lside+$max_stelle;
                           if ($lside<0) { $rside=$rside-$lside; $lside=0; }
                           if ($rside>$zeilenlaenge) { $rside=$zeilenlaenge; }
                           }
                        else { $lside=0; $rside=$zeilenlaenge; }
                        $stelle=substr($zeile,$lside,$rside-$lside);      
                        $stelle=ereg_replace($wort,"<span class=\"markierung\">".$wort."</span>",$stelle);
                        $stelle="...".$stelle."...";
                        $treffer["textstelle"][$dateinummer]=$stelle;
                        }
                        else if ($anzahl==2) { $teil=ereg_replace(",","",$teil); $mehr=$teil; }
                        else if ($anzahl>2)
                           {
                           if (strlen($mehr)<$mehr_laenge) { if ($mehr=="") { $komma=""; } else { $komma=", "; } $wort=ereg_replace(", ","",$wort); $mehr.=$komma.$wort; }
                           else { if ($schluss!=1) {$mehr=$mehr." ..."; $schluss=1;} }
                           }
                     }
                  }
                  ### ganze Wörter ENDE ###
                  ### Wortteile ###
                  else
                  {
                  if ($wort==$suchwort)
                     {
                     if (!in_array($suchwort,$gefundene_woerter)) { array_push($gefundene_woerter,$suchwort); }
                     $anzahl++;
                     $treffer["vorkommnisse"][$dateinummer]++;
                     if ($anzahl==1)
                        {
                        $treffer["datei_url"][$dateinummer]=$name;
                        
                        $position=strpos($zeile,$wort);
                        $wortlaenge=strlen($wort);
                        $zeilenlaenge=strlen($zeile);
                        if ($zeilenlaenge>$max_stelle)
                           {
                           $lside=$position-(($max_stelle-$wortlaenge)/2);
                           $rside=$lside+$max_stelle;
                           if ($lside<0) { $rside=$rside-$lside; $lside=0; }
                           if ($rside>$zeilenlaenge) { $rside=$zeilenlaenge; }
                           }
                        else { $lside=0; $rside=$zeilenlaenge; }
                        $stelle=substr($zeile,$lside,$rside-$lside);      
                        $stelle=" ".$stelle." ";
                        $stelle=ereg_replace(" ".$wort." "," <span class=\"markierung\">".$wort."</span> ",$stelle);
                        $stelle="...".$stelle."...";
                        $treffer["textstelle"][$dateinummer]=$stelle;
                        }
                        else if ($anzahl==2) { $teil=ereg_replace(",","",$teil); $mehr=$teil; }
                        else if ($anzahl>2)
                           {
                           if (strlen($mehr)<$mehr_laenge) { if ($mehr=="") { $komma=""; } else { $komma=", "; } $wort=ereg_replace(", ","",$wort); $mehr.=$komma.$wort; }
                           else { if ($schluss!=1) {$mehr=$mehr." ..."; $schluss=1;} }
                           }
                     }
                  }
                  ### Wortteile ENDE ###
               }
               }
            }
            fclose($datei);
            $treffer["woerter"][$dateinummer]=count($gefundene_woerter);
            $treffer["mehr"][$dateinummer]=$mehr;
            if (count($gefundene_woerter)>0) { $dateinummer++; }
         }
      }
   closedir($ordner);
   }
   
}

function ausgabe()
{
global $treffer,$dateinummer,$PHP_SELF,$index,$SERVER_NAME,$treffer_pro_seite,$suchwoerter,$suchtext,$grossschreibung,$ganzewoerter;

echo "<table width=\"500\" border=\"0\" align=\"center\"><tr><td>\n";
echo "<span style=\"font-size:13pt\"><b>Ergebnisse der Suche:</b></span><br><br>\n";
$treffer_anzahl=count($treffer["datei_url"]);
if ($treffer_anzahl==0) { echo "<span style=\"font-size:13pt\"><b><center><br><br>Leider nichts gefunden<br><br></center></b></span></td></tr></table>\n"; }
else
{
@array_multisort($treffer["woerter"],SORT_DESC,$treffer["vorkommnisse"],SORT_DESC,$treffer["datei_url"],$treffer["textstelle"],$treffer["mehr"]);
$suchtext=ereg_replace(" ",", ",$suchtext);
if (count($suchwoerter)>1) { echo "Gesuchte Wörter: "; } else { echo "Gesuchtes Wort: "; }
echo "$suchtext<br><br>\n";
$anfang=$index*$treffer_pro_seite+1;
$ende=$anfang+$treffer_pro_seite-1; if ($ende>$treffer_anzahl) { $ende=$treffer_anzahl; }
echo "<b>Treffer $anfang-$ende von insgesamt $treffer_anzahl Treffern, beste Treffer zuerst:<br><br>\n";
echo "</td></tr></table>\n";

for ($k=0;$k<$treffer_pro_seite;$k++)
{
$i=$index*$treffer_pro_seite+$k;
$platz=$i+1;
if ($platz<=$ende)
{
echo "<table width=\"580\" border=\"1\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">\n";
$t=1;
$treffer["datei_url"][$i]=ereg_replace("\./","",$treffer["datei_url"][$i]);
$datei=fopen($treffer["datei_url"][$i],"r");
   while ($t<7)
   {
   $zeile=fgetss($datei,1000,""); $zeile=trim($zeile);
      if ($zeile!="")
      {
      echo "<tr><td height=\"16\" colspan=\"2\">";
      echo "<span class=\"t_nummer\">".$platz.".</span> <a href=\"".$treffer["datei_url"][$i]."\"><b>".$zeile."</b></a>";
      break;
      }
   $t++;
   }
fclose($datei);
if ($treffer["woerter"][$i]==1) { $woerter="Wort"; } else { $woerter="Wörter"; }
if ($treffer["vorkommnisse"][$i]==1) { $vorkommnisse="Vorkommnis"; } else { $vorkommnisse="Vorkommnisse"; }
echo "<p style=\"margin-top:0pt; margin-bottom:0pt\" align=\"justify\">\n";
echo $treffer["textstelle"][$i]."<br>\n";
echo "<small><b>Weitere Vorkommnisse: </b>".$treffer["mehr"][$i]."</small></p></td></tr>\n";
echo "<tr><td><a href=\"http://".$SERVER_NAME."/".$treffer["datei_url"][$i]."\" target=\"_blank\">\n";
echo "<img src=\"newwindow.gif\" width=\"14\" height=\"10\" border=\"0\">\n";

echo "&nbsp;http://".$SERVER_NAME."/".$treffer["datei_url"][$i]."</a></td>\n";
echo "<td align=\"right\"><small><b>".$treffer["woerter"][$i]."&nbsp;".$woerter." | ".$treffer["vorkommnisse"][$i]."&nbsp;".$vorkommnisse."</b></small></td>\n";
echo "</td></tr></table><br><br>\n";
}
}
}

if ($treffer_anzahl>0) { echo "<center>Seite:&nbsp;&nbsp;&nbsp;\n"; }
$j=ceil($treffer_anzahl/$treffer_pro_seite)-1;
for ($i=0;$i<=$j;$i++)
   {
   $zahl=$i+1;
   if (($index+1)!=$zahl) { echo "<a href=\"$PHP_SELF?suchtext=$suchtext&index=".$i."&grossschreibung=".$grossschreibung."&ganzewoerter=".$ganzewoerter."\">"; }
   echo $zahl;
   if (($index+1)!=$zahl) { echo "</a>"; }
   echo "&nbsp;&nbsp;&nbsp;";
   }
if ($treffer_anzahl>0) { echo "</center>\n"; }
}
########### Ende des Suchmaschinenskripts ###########
?>

</body>
</html>



Ich möchte, dass das Script nur nach Ergebnissen im Ordner "suchordner" sucht. Habe das Script direkt im /htdocs. Der "suchordner" befindet sich unter htdocs/suchordner.

Wenn ich als gesamtpfad /suchordner angebe, berücksichtigt die suche trotzdem alle ordner im htdocs. Habe schon alle möglichen Varianten ausprobiert.

Woran kann das liegen?
Ich danke euch schon jetzt für eure Hilfe.

Viele Grüße,
Sabine
Sabine86
 
Posts: 1
Joined: 24. January 2008 07:56

Postby Scory » 24. January 2008 12:32

Abgesehen davon, dass das Script der absolute Horror ist - grauenhafte Programmierung und tausende von Warnings - brauchst Du nur in der richtigen Zeile den richtigen Wert anzugeben:

Statt:

Code: Select all
$pfade_gesamt="./";


einfach

Code: Select all
$pfade_gesamt="./suchordner/";


Wichtig ist der Punkt am Anfang und der Slash am Ende.
Scory
 


Return to PHP

Who is online

Users browsing this forum: No registered users and 11 guests