PHP-Suchmaschine auch für PHP-Seiten
Tom1tk
- php
Hallo zusammen,
der unten abgebildete Code ist eine Suchmaschine für die angegebenen Verzeichnisse. Die Maschine durchsucht allerdings nur den HTML-Teil der php-Seiten.
Kann man das umschreiben, dass die geparste php-Seite durchsucht wird. Hat folgenden Hintergrund: Ich hab einen Login-Bereich und möchte, dass wenn der User eingeloggt ist, dass er dann die "internen" Seiten auch durchsuchen kann.
Nächste Frage: Kann man das so schreiben, dass alle Meta-Angaben ignoriert werden? Dass z.B. Nur der Titel und der Body durchsucht werden?
Würde mich tierisch freuen, wenn mir jemand mehr als nur "Ja, ist möglich!" zurückschreiben würde!
Danke für Eure Bemühungen
Tom1tk
// ***** konfigurierbare parameter *****
$aPath = array ('../ordner' ); // welche verzeichnisse sollen durchsucht werden
$aExtension = array ( '.php' ); // welche dateitypen sollen durchsucht werden
// ***** ende konfiguration *****
$sUL = '';
// search file
function searchFile($sPath) {
global $sUL;
global $search;
global $sLinkAttrib;
$sFile = strip_tags(join('',file($sPath)),'<title>,<meta>');
if (stristr($sFile, $search)) {
eregi('(<title>)([^<]+)', $sFile, $aParts);
if ($aParts[2]) {
$sUL .= "<li><a href='".$sPath."' ".$sLinkAttrib.">".$aParts[2]."</a>\n";
}
else {
$sUL .= "<li><a href='".$sPath."' ".$sLinkAttrib.">".basename($sPath)."</a>\n";
}
}
}
// scan directory
function scanDir($sDir) {
global $aExtension;
// create dir object
$oDir = dir($sDir);
// loop over all files
while ($sEntry = $oDir->read()) {
$sPath = $sDir.'/'.$sEntry;
if (! is_dir($sPath)) {
reset ($aExtension);
while (list($sKey, $sExt) = each($aExtension)) {
if (strtolower(substr($sPath, -1 * strlen($sExt)) == strtolower($sExt))) {
searchFile($sPath);
}
}
}
}
$oDir->close();
}
// suchbegriff vorhanden ?
if (isset($search) and (trim($search) != '')) {
// scan all directories
while (list($sKey, $sName) = each ($aPath)) {
scanDir($sName);
}
}
//Ausgabe
print $sUL;
moinsen
also da die dateien per file() eingelesen werden wird sowieso erstmal der php-code mitdurchsucht
wenn dann müsste man über ne art loop-back die dateien öffnen
sprich man müsste zum eigenen server ne http-verbindung aufbauen, und dann die dateien öffnen, sonst werden sie ja nich geparst
uuuund wie man das macht steht in der wunderschönen php-doku
gruß
Halloa,
also da die dateien per file() eingelesen werden wird sowieso erstmal der php-code mitdurchsucht
Nö, glaub ich net. Ich hab das getestet. Wenn ich auf Irgeneiner Seite print "Blabla"; einfüge und dann nach diesem String suche, kommt nix bei raus!!!
Die Funktion strip_tags() löscht ja alle php- und HTML- Tags raus, also auch die print()-Funktion!
uuuund wie man das macht steht in der wunderschönen php-doku
Und wo? Nach was muss ich da suchen? f_sock_open (oder wie das heißt?)?
Greets Tom1tk
Moin!
Die Funktion strip_tags() löscht ja alle php- und HTML- Tags raus, also auch die print()-Funktion!
Das wird Dir nur nicht viel nützen, wei die "dynamischen" Inhalte dann fehlen, Du durchsuchst also das nackte Gerüst der Seiten. Sehr uneinbringlich.
Und wo? Nach was muss ich da suchen? f_sock_open (oder wie das heißt?)?
http://de2.php.net/manual/de/function.fopen.php
Genau da steht, was Du suchst.
PHP arbeitet also zweimal für Dich. Einmal erzeugt es die Seite (leider lassen sich ggf. POST- Daten nicht so absetzen und auch nicht auf Formular- Buttons klicken...) und einmal duchsucht es das Resultat der eigenen Bemühungen. Ist doch klasse- oder?
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hallo Tom1tk,
Kann man das umschreiben, dass die geparste php-Seite durchsucht wird. Hat folgenden Hintergrund: Ich hab einen Login-Bereich und möchte, dass wenn der User eingeloggt ist, dass er dann die "internen" Seiten auch durchsuchen kann.
Ich denke schon. Ich würde es mal so probieren:
ob_start(); // http://www.php.net/manual/en/function.ob-start.php
include 'phpdatei.php';
$inhalt = ob_get_clean(); // http://www.php.net/manual/en/function.ob-get-clean.php
Nächste Frage: Kann man das so schreiben, dass alle Meta-Angaben ignoriert werden? Dass z.B. Nur der Titel und der Body durchsucht werden?
Selbstverständlich. Am einfachsten vielleicht mit
preg_replace('/<meta .*>/im', '', ...); // http://www.php.net/manual/en/ref.pcre.php
Würde mich tierisch freuen, wenn mir jemand mehr als nur "Ja, ist möglich!" zurückschreiben würde!
Ja, ist möglich! *SCNR*
Schöne Grüße,
Johannes