EingabeFeld für SuchBegriffe
<html><head><title>Anzeige</title></head>
<body bgcolor="#eeeeee">
<h2>EingabeFeld für SuchBegriffe</h2>
<table border=0><tr>
<form action="<? echo $PHP_SELF ?>" method="post">
<td><input type="text" name="formInput" len="30" maxlen="30"
value='<? echo isset($formInput) ? stripslashes($formInput) : "ereg -replace" ?>'></td>
<td><input type="submit" name="Submit"></td>
</form>
</tr></table><hr noshade size="1">
<?
// ====================== HilfsFunktionen =================
//
// In : String aus SuchFeld eines Formulars
// Out: Array mit einzelnen Suchwoerter
// Fkt: Behandelt Woerter in HOCHKOMMATAS als EIN Wort
function GetSearchWords($formInput)
{
$HK = """; // HK nach htmlspecialchars
// a. Worte nach BLANKS aufsplitten
$arr = split(" ",trim($formInput));
// b. HK-Worte zusammenfuegen (HK = HochKomma)
for($str_HK="",$i=0;$i<count($arr);$i++)
if ( strlen($arr[$i]) > 2 ) // Word-Länge > 1
if ( strlen($str_HK) > 0) { // * HK-Modus
$str_HK .= " ".$arr[$i]; // -> HK-Woerter zus.fuegen
if ( ereg($HK,$arr[$i]) ) { // mit HK: Ende
$arrRet[] = $str_HK; // -> HK-Wort ins Array
$str_HK = ""; }
}
else // * nicht HK-Modus
if ( ereg($HK,$arr[$i]) ) // hat HK: Start
$str_HK = $arr[$i];
else $arrRet[] = $arr[$i];
// c. HK-Worte um HK u. BLANKS bereinigen
for($i=0; $i<count($arrRet); $i++) {
$arrRet[$i] = str_replace($HK," ",$arrRet[$i]); // HK in Blanks
$arrRet[$i] = trim($arrRet[$i]); // Blanks weg
}
return $arrRet;
}
// Rekursives Einlesen von Dateien u. Verzeichnissen
// Input : Array mit Basis-Directory
// Return: Array mit allen File/Dir's in Unterverzeichnissen
function GetAllFiles($arrDir)
{
$arrRet_F = array();
for($i=0; $i < count($arrDir); $i++ ) {
$arr = $arrDir[$i];
$arrTmp_F = GetDirFiles($arr["Verz"].$arr["Name"]."/","File");
$arrRet_F = php3_array_merge($arrRet_F,$arrTmp_F);
$arrTmp_D = GetDirFiles($arr["Verz"].$arr["Name"]."/","Dir");
$arrRet_F = php3_array_merge($arrRet_F, GetAllFiles($arrTmp_D) );
}
return $arrRet_F;
}
// Files o. Dirs Einlesen; Link auf HTML-Datei
// Return: Array; $mode = {"Dir","File"}
function GetDirFiles($strPath,$mode)
{
$objDir = opendir($strPath); // Verzeichnis Oeffnen (Referenz)
$arrDir = array();
while ($strFile = readdir($objDir)) { // Verzeichnis Einlesen
if ( ((! strcmp($mode,"Dir") ) && is_dir($strPath.$strFile) ) ||
((! strcmp($mode,"File")) && (! is_dir($strPath.$strFile) ) ) )
if ( IsSelectedFile($strFile,$mode) ) {
$arrTags = array();
$title = "";
if ( ! is_dir($strPath.$strFile) ) {
$arrMeta = get_meta_tags($strPath.$strFile); // Meta-Tags
$title = $arrMeta["title"];
if ( strlen($title) < 1 ) $title = "Ohne Titel";
}
$link = "<a href=\"../center/anzeige.php3?script=$strPath$strFile&source=yes\" ";
$link .= "target=\"_blank\">$title</a>";
$arrDir[] = array("Sort" => 0, "Tref" => 0,
"Verz" => $strPath, "Name" => $strFile,
"Title" => "$link", "Inhalt" => "");
}
}
closedir($objDir); // Verzeichnis Schließen
return $arrDir;
}
// FilterFktion: welche File/Dir ausselektieren ?
function IsSelectedFile($strFile,$mode)
{
if ( ! strcmp($mode,"Dir") ) { // a. Directory
if ( ereg("^\.",$strFile) ) // nicht: "." ".."
return false;
}
else { // b. Filter WEG-Mit wenn:
if ( ! ereg("\.php3",$strFile) ) return false; // nicht ".php3"
if ( ereg("\.inc" ,$strFile) ) return false; // wenn: ".inc"
}
return true; // OK: selektiert
}
// DateiArray auf Suchworte untersuchen u. zurueckgeben
// - Treffer je Datei setzen; - SuchWorte highlighten
function GetResultArray($arrResult,$arrWords)
{
$arrRet = array();
for($i=0;$i<count($arrResult);$i++) { // alle Dateien
// BODY der Datei einlesen
$htmlStr = implode("",file($arrResult[$i]["Verz"]."".$arrResult[$i]["Name"]) );
$bodyStr = GetHtmlTag($htmlStr,"body");
$bodyStr = htmlspecialchars($bodyStr);
for($zaehler=0,$j=0;$j<count($arrWords);$j++) { // alle Such-Muster
// Suchwort mit "+"/"-"
$word = $arrWords[$j];
$mode = $word[0];
if ( $mode == "+" || $mode == "-")
$word = substr($word,1);
else $mode = "";
$word = quotemeta($word); // vor ereg: *+\?.. maskieren
//
if ( ereg($word,$bodyStr) ) {
if ( $mode == "-" ) { // darf nicht vorhanden sein
$zaehler = 0; break; } // -> Stop
$zaehler++;
$replace = "<font color=\"#ff6666\">".$word."</font>"."zz"."zz";
$bodyStr = ereg_replace($word,$replace,$bodyStr);
}
else {
if ( $mode == "+" ) { // muss vorhanden sein
$zaehler = 0; break; } // -> Stop
}
}
if ( $zaehler > 0 ) {
$arr = GetMarkedLines($bodyStr,"zz"."zz");
$arrResult[$i]["Inhalt"] = implode("<br>",$arr);
$arrResult[$i]["Tref"] = count($arr);
$arrResult[$i]["Sort"] = 999 - count($arr);
$arrRet[] = $arrResult[$i];
}
}
return $arrRet;
}
function GetMarkedLines($bodyStr,$marke)
{
$arrTmp = explode("\n",$bodyStr);
for($i=0; $i < count($arrTmp); $i++)
if ( strstr($arrTmp[$i],$marke ) )
$arr[] = "-> ".str_replace($marke,"",$arrTmp[$i]);
return $arr;
}
function GetHtmlTag($htmlStr,$tagName,$mitTag=0) {
if ( ! ($stt1 = strpos($htmlStr,"<" .$tagName,0))) return "";
$end1 = strpos($htmlStr,">",$stt1);
if ( ! ($stt2 = strpos($htmlStr,"</".$tagName,0))) return "";
$end2 = strpos($htmlStr,">",$stt2);
if ( $mitTag ) return substr($htmlStr,$stt1 ,$end2-$stt1+1);
else return substr($htmlStr,$end1+1,$stt2-$end1-1);
}
// Anzeige des Treffer-Ergebnisses
function ShowResult($arr)
{
echo "<div class=\"txt10\"><b><i>SuchErgebnis:</i> ";
if ( count($arr) > 10 ) echo "1 bis 10 von ";
echo count($arr)." Treffer</b></div>";
// echo "<dl class=\"txt10\">";
for($i=0; $i < count($arr) && $i < 10; $i++) { // alle Dateien/Verzeichnisse
echo "<hr noshade size=1><dl class=\"txt10\">";
$arrDatei = $arr[$i];
if ( $i == 0 ) $maxTref = $arrDatei["Tref"];
$quote = ($arrDatei["Tref"] / $maxTref) * 100;
echo "<dt>".($i+1).". ".$arrDatei["Title"]."</dt>\n";
echo "<dd><code> ".$arrDatei["Inhalt"]."</code></dd><p>";
echo "<dd class=\"txt8\"><b>Datei : </b> ".$arrDatei["Verz"].$arrDatei["Name"];
echo " <b>Quote: </b> ".$quote." %</dd>\n";
echo "</dl>";
}
//echo "</dl>";
}
// ====================== ProgrammAblauf ==================
//
if ( isset($formInput) ) {
$rootPath = "../"; // BasisPfad
// a. SuchWoerter extrahieren
$formInput = stripslashes($formInput); // Slashes entfernen
$formInput = htmlspecialchars($formInput); // Sonderzeichen wandeln
$arrWords = GetSearchWords($formInput); // Suchworte ermitteln
// b. Alle Dateien rekursiv in ein Array einlesen
$arrDir_D = GetDirFiles($rootPath,"Dir"); // Basis-Dir
$arrDir_F1 = GetDirFiles($rootPath,"File"); // Basis-Files
$arrDir_F2 = GetAllFiles($arrDir_D); // Files aus UnterVerzeichnisse
$arrResult = php3_array_merge($arrDir_F1,$arrDir_F2); // Merge: alle in ein Array
// c. Treffer in Array eintragen
$arrResult = GetResultArray($arrResult,$arrWords);
$arrResult = php3_array_multisort($arrResult);
// d. Ausgabe der TrefferListe
// ShowArrayTable($arrResult);
ShowResult($arrResult) ; // Ergebnis als Tabelle anzeigen
}
?>
</body></html>