#! /usr/bin/php -q ]*>(.*)|siU", $string, $var); return $var[1]; } function SpiderFile($file) { /* Die Datei wird ausgelesen */ $file_link=fopen($file[full],"r"); $contents=fread($file_link,$file[size]); fclose($file_link); $title=GetTitle($contents); if (!empty($title)) { /* Die Header-Daten werden ausgelesen */ $meta_tags=@get_meta_tags($file[full]); $data[title]=$title; $data[description]=$meta_tags[description]; $data[keywords]=$meta_tags[keywords]; $data[size]=$file[size]; $data[time]=$file[time]; $data[name]=$file[name]; $data[path]=$file[path]; /* Der Content im Document wird gefiltert */ $contents=strip_tags($contents); $contents=str_replace("\n", " ", $contents); $contents=str_replace(" ", " ", $contents); $contents=stripcslashes($contents); $contents=htmlspecialchars($contents, ENT_QUOTES); $contents_array=explode(" ",$contents); array_unique($contents_array); $data[body]=implode(" ",$contents_array); } return $data; } function SetQuery($data) { $string="stamp=NOW(), name='".$data[name]."', path='".$data[path]."', size='".$data[size]."', time='".$data[time]."', title='".$data[title]."', description='".$data[description]."', keywords='".$data[keywords]."', body='".$data[body]."'"; return($string); } $stat_start=date("Y F j, H:i:s"); $stat_start_stamp=date("YmdHis"); /* Lädt alle Dateinamen in ein Array und Sammelt Basisinformationen über die Datei */ foreach($conf_files as $var_files) { $result_string=shell_exec("find ".$conf_basedir." -name \"*".$var_files."\" -depth -type f -print"); $var_array=explode("\n", $result_string); foreach($var_array as $var_string) { $status="OK"; foreach($conf_ignorepath as $ignorepath) { if(strpos($var_string,$ignorepath)>0) { $status="NotOK"; } } if ($status=="OK") { $result_array[]=$var_string; } } foreach($result_array as $var_string) { $file[full]=$var_string; $file[name]=basename($var_string); $file[path]=substr(dirname($var_string),strlen($conf_basedir)-1); $file[size]=filesize($var_string); $file[time]=filectime($var_string); if($file[name]!="" and $file[size]>0 and $file[time]>0) { $files[]=$file; } } } /* Die Statistik-Zähler werden einfach mal alle angelegt */ $stat_found=count($files); $stat_new=0; $stat_updated=0; $stat_unchanged=0; $stat_deleted=0; $stat_removed=0; $stat_spidered=0; foreach($files as $file) { /* Für jede gefundene Datei wird nun geschaut, ob schon in der DB ein Datensatz dafür angelegt wurde */ $result_db=QueryDB("SELECT file,size,time FROM spider WHERE name='".$file[name]."' AND path='".$file[path]."'",$dblink); $row_old=mysql_fetch_array($result_db); if(!empty($row_old)) { /* Sollte ein Datensatz vorhanden sein... */ if($row_old[size]==$file[size] and $row_old[time]==$file[time]) { /* Sollte sich die Datei seit der letzten Indizierung nicht verändert haben... */ $result_db=QueryDB("UPDATE spider SET stamp=NOW() WHERE file='".$row_old[file]."'",$dblink); $stat_unchanged++; } else { /* Sollte sich die Datei seit der letzten Indizierung verändert haben... */ $data=SpiderFile($file); $stat_spidered++; if(!empty($data)) { /* Können Metadaten ausgelesen werden, werden diese gespeichert */ $result_db=QueryDB("UPDATE spider SET ".SetQuery($data)." WHERE file='".$row_old[file]."'",$dblink); $stat_updated++; } else { /* Ist die Datei nicht lesbar, wird der Datensatz gelöscht */ $result_db=QueryDB("DELETE FROM spider WHERE file='".$row_old[file]."'",$dblink); $stat_deleted++; } } } else { /* Sollte noch kein Datensatz vorhanden sein... */ $data=SpiderFile($file); $stat_spidered++; if(!empty($data)) { /* ... und die Datei lesbar sein, wird der Datenatz geschrieben */ $result_db=QueryDB("INSERT INTO spider SET ".SetQuery($data),$dblink); $stat_new++; } } } /* Löschen aller alten Datensätze */ $result=QueryDB("DELETE FROM spider WHERE stamp<'".$stat_start_stamp."'",$dblink); $stat_removed=mysql_affected_rows($dblink); /* Ausgabe der statischen Informationen */ $stat_end=date("Y F j, H:i:s"); echo "INDIZIERUNG VON DOKUMENTEN\n"; echo "Ergebnis der Indizierung des Verzeichnisses ".$conf_basedir."\n\n"; echo "Startzeit: ".$stat_start."\n"; echo "Endzeit: ".$stat_start."\n"; echo "Verarbeitete Dateien: ".$stat_found."\n"; echo "Neue Datensaetze: ".$stat_new."\n"; echo "Aktualisierte Datensaetze: ".$stat_updated."\n"; echo "Unveraenderte Datensaetze: ".$stat_unchanged."\n"; echo "Geloeschte Datensaetze: ".$stat_deleted."\n"; echo "Entfernte Datensaetze: ".$stat_removed."\n"; echo "Geprüfte Dateien: ".$stat_spidered."\n"; ?>