Tom1tk: PHP-Suchmaschine auch für PHP-Seiten

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;

  1. 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ß

    1. 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

      1. 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®

        --
        Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
  2. 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

    --
    ss:| zu:} ls:[ fo:} de:] va:} ch:) sh:( n4:| rl:( br:< js:| ie:{ fl:( mo:}
    http://www.zeller-johannes.de/