Huhu!
Tut mir Leid, dass ich jetz so ein langes Script poste, dass ihr warscheinlich eh nicht lesen werdet aber vlt. hat ja jemand mal Lust drauf ^^.
Geht um folgendes:
Das Script soll die Datenfile für eine Volltextsuche (auf einer Homepage) erstellen, was auch relativ gut funktioniert. Nur sitze ich nun schon vergeblich stundenlang am Fehler suchen, weil das Script Verzeichnisse, welche aus nur einem Buchstaben bestehen, überspringt.
Ich finde den "Fehler" im Script nicht, vlt bin ich auch nur blind
Würde mich freuen wenn jemand Zeit dafür hat.
so long
PHP
<?php
$root_dir = $_SERVER['DOCUMENT_ROOT'].$from_dir.'/';
// Verzeichnisdurchlauf starten
if (count($search_dir) == 0) {
walk_dir($root_dir, 0);
} else {
foreach ($search_dir as $dir) {
walk_dir($root_dir.$dir.'/', 0);
}
// Root durchsuchen, wenn ausgewählt
if ($search_rootdir == '1') walk_dir($root_dir, 1);
}
// Vorhandene Daten-Datei löschen
@unlink('search_data.txt');
// Inhalte in Datenfile schreiben
$new_file = fopen('./search_data.txt', "w+");
fputs($new_file, $content);
fclose ($new_file);
#################################################
# Function für den Verzeichnisdurchlauf
function walk_dir($dir, $rootsearch, $pos=2) {
global $root_dir, $ignore_dir, $ignore_dirnames, $dat_type, $no_title, $content, $q, $use_metatitle, $area_description, $area_keywords;
$handle = @opendir($dir);
while ($file = @readdir ($handle))
{
if (preg_match("=^\.{1,2}$=",$file)) continue;
$cut_dir = str_replace($root_dir, '', $dir); // Verzeichnisse zum Vergleich anpassen
$cut_dir = substr($cut_dir, 0, -1);
if (in_array($cut_dir, $ignore_dir)) continue; // zu ignorierende Verzeichnisse auslassen
if (preg_match('=('.$ignore_dirnames.')=i', $cut_dir)) continue; // Verzeichnisse mit entsprechenden Namen ausschließen
if (is_dir($dir.$file) && !$rootsearch) {
walk_dir($dir.$file.'/', 0, $pos + 3);
}
else {
#########################################
# Seiteninhalte verarbeiten
#########################################
$abs_dir = preg_replace("=$root_dir=","", $dir); // absoluten Pfad ermitteln
if (preg_match("=(\.$dat_type)$=", $file) && $file!="search_data.txt") { // wenn eine Datei eine zulässige Endung hat...
$q++;
$str = join("", file("$dir$file")); // ...Datei einlesen
if (!preg_match("=\<\!\-\-.no_search.\-\-\>=siU", $str)) { // auf auszuschließende Seiten prüfen
$frrepl = array("=\r\n+=", "=\=", "=.*=siU", "=<script.*>.*<\/script>=siU", "=<style.*>.*<\/style>=siU", "=\|=");
$torepl = array(' ', ' ', '', '', '', 'I');
$str = preg_replace($frrepl, $torepl, $str);
// Titel ermitteln
preg_match("=<title>(.*?)</title>=si", $str, $title);
// Meta-Beschreibung ermitteln
if ($area_description == '1') {
preg_match('=<meta.*?name\="description".*?content\="(.*?)".*?\>=si', $str, $descr);
}
// Keywords
if ($area_keywords == '1') {
preg_match('=<meta.*?name\="keywords".*?content\="(.*?)".*?\>=si', $str, $keyw);
}
// Titel alternativ (Meta-Tag)
if ($use_metatitle == '1') {
preg_match('=<meta.*?name\="psearchtitle".*?content\="(.*?)".*?\>=si', $str, $metatitle);
if (!empty($metatitle[1])) { $title[1] = $metatitle[1]; }
}
$a = preg_replace("=<title>.*?<\/title>=si", '', $str); // Titel entfernen
$a = preg_replace("=<\?.*?\?>=s", '', $a); // PHP-Tags löschen um nur Text zu durchsuchen
$a = preg_replace("=(<[^>]+>)=siU", '', $a); // Tags löschen um nur Text zu durchsuchen
echo $q.': '.$dir.$file.'
';
if (!empty($title[1])){ // Title der Seite auslesen
$new_title = "$title[1]";
}
else {
$new_title = "$no_title";
}
$new_path = "/$abs_dir$file";
// Inhalte zusammenfassen
if (!preg_match("=\(\.\*\)|\(\.\*\?\)=", $new_title) && !empty($a)) {
$content .= preg_replace("=\s+=", ' ', $new_path.'|'.$new_title.' |'."$descr[1]".' |'."$keyw[1]".' |'.$a);
$content .= "\n";
}
unset($str);
}
}
}
}
@closedir($handle);
}
# Funktion ende
?>
Alles anzeigen