schuelsche
12-06-2007, 16:23
Hallo,
ich habe ein Wurzelverzeichnis, von dem ausgehend ich alle darin enthaltenen Textdateien nach einem bestimmten Begriff durchsuchen möchte.
Verzeichnisstruktur:
/Wurzelverzeichnis
/Wurzelverzeichnis/textdatei1.txt
/Wurzelverzeichnis/textdatei2.txt
/Wurzelverzeichnis/Ordner1/
/Wurzelverzeichnis/Ordner1/textdatei3.txt
/Wurzelverzeichnis/Ordner1/textdatei4.txt
/Wurzelverzeichnis/Ordner2/textdatei5.txt
/Wurzelverzeichnis/Ordner2/textdatei6.txt
Die Textdateien sollen per PHP nach einem bestimmten Begriff durchsucht werden und anschliessend soll die Datei mit dem Pfadnamen ausgegeben werden, die den Begriff enthält.
Ich habe nun jeweils PHP-Codeschnipsel gefunden, die das unabhängig voneinander tun, aber ich bekomme es nicht in eines zusammen.
Codeschnipsel für rekursive Anzeige von Dateien in einer Ordnerstruktur:
<?php
// Sample function to recursively return all files within a directory.
// http://www.pgregg.com/projects/php/code/recursive_readdir.phps
Function listdir($start_dir='./Wurzelverzeichnis') {
$files = array();
if (is_dir($start_dir))
{
$fh = opendir($start_dir);
while (($file = readdir($fh)) !== false)
{
# loop through the files, skipping . and .., and recursing if necessary
if (strcmp($file, '.')==0 || strcmp($file, '..')==0) continue;
$filepath = $start_dir . '/' . $file;
if ( is_dir($filepath) )
$files = array_merge($files, listdir($filepath));
else
array_push($files, $filepath);
}
closedir($fh);
}
else
{
# false if the function was called with an invalid non-directory argument
$files = false;
}
return $files;
}
$files = listdir('./Wurzelverzeichnis');
print_r($files);
?>
Mit einem anderen Codeschnipsel kann ich die Dateien nach einem bestimmten String durchsuchen:
<?php
$a = "test";
$directory = "./Wurzelverzeichnis/";
$handle = opendir($directory);
while ($file = readdir ($handle))
{
$file = $directory.$file;
if (!is_file($file)) continue;
$fd = fopen($file,"r");
$seite = fread ($fd, filesize ($file));
$seite = strtolower($seite);
fclose ($fd);
if (strstr($seite,$a))
{
print($file);
}
}
?>
Wie bekomme ich das denn jetzt so zusammengebacken, dass die Textdateien des Wurzelverzeichnisses rekursiv nach einem bestimmten Begriff durchsucht werden? Oder gibt es eine ganz andere Idee? Nach 3 Stunden Basteln verliere ich langsam den Überblick...
Grüsse
schuelsche
ich habe ein Wurzelverzeichnis, von dem ausgehend ich alle darin enthaltenen Textdateien nach einem bestimmten Begriff durchsuchen möchte.
Verzeichnisstruktur:
/Wurzelverzeichnis
/Wurzelverzeichnis/textdatei1.txt
/Wurzelverzeichnis/textdatei2.txt
/Wurzelverzeichnis/Ordner1/
/Wurzelverzeichnis/Ordner1/textdatei3.txt
/Wurzelverzeichnis/Ordner1/textdatei4.txt
/Wurzelverzeichnis/Ordner2/textdatei5.txt
/Wurzelverzeichnis/Ordner2/textdatei6.txt
Die Textdateien sollen per PHP nach einem bestimmten Begriff durchsucht werden und anschliessend soll die Datei mit dem Pfadnamen ausgegeben werden, die den Begriff enthält.
Ich habe nun jeweils PHP-Codeschnipsel gefunden, die das unabhängig voneinander tun, aber ich bekomme es nicht in eines zusammen.
Codeschnipsel für rekursive Anzeige von Dateien in einer Ordnerstruktur:
<?php
// Sample function to recursively return all files within a directory.
// http://www.pgregg.com/projects/php/code/recursive_readdir.phps
Function listdir($start_dir='./Wurzelverzeichnis') {
$files = array();
if (is_dir($start_dir))
{
$fh = opendir($start_dir);
while (($file = readdir($fh)) !== false)
{
# loop through the files, skipping . and .., and recursing if necessary
if (strcmp($file, '.')==0 || strcmp($file, '..')==0) continue;
$filepath = $start_dir . '/' . $file;
if ( is_dir($filepath) )
$files = array_merge($files, listdir($filepath));
else
array_push($files, $filepath);
}
closedir($fh);
}
else
{
# false if the function was called with an invalid non-directory argument
$files = false;
}
return $files;
}
$files = listdir('./Wurzelverzeichnis');
print_r($files);
?>
Mit einem anderen Codeschnipsel kann ich die Dateien nach einem bestimmten String durchsuchen:
<?php
$a = "test";
$directory = "./Wurzelverzeichnis/";
$handle = opendir($directory);
while ($file = readdir ($handle))
{
$file = $directory.$file;
if (!is_file($file)) continue;
$fd = fopen($file,"r");
$seite = fread ($fd, filesize ($file));
$seite = strtolower($seite);
fclose ($fd);
if (strstr($seite,$a))
{
print($file);
}
}
?>
Wie bekomme ich das denn jetzt so zusammengebacken, dass die Textdateien des Wurzelverzeichnisses rekursiv nach einem bestimmten Begriff durchsucht werden? Oder gibt es eine ganz andere Idee? Nach 3 Stunden Basteln verliere ich langsam den Überblick...
Grüsse
schuelsche