InternInhaltsverzeichnisGlossarBausteineLinklisteTutorialsKommentare

Thema: PHP - Den Inhalt aller Textdateien nach einem Suchbegriff durchsuchen Artikel anzeigen

Stephan schrieb am Donnerstag, den 9 Februar 2023 #1
Na, geschludert?
Besser gehts so:
--------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<form action="" method="post">
 <label>Suche: <input type="text" name="text"></label> 
 <input type="submit" value=">>">
</form>

<?php
//  Den Inhalt aller Textdateien nach einem Suchbegriff
//  durchsuchen und gefundene Dateien als Link ausgeben. 
//  Durchsucht werden alle Unterverzeichnisse.

if ($_SERVER["REQUEST_METHOD"] == "POST") {
 
//$verzeichnis = "./"; // Verzeichnis angeben
 
$verzeichnis "./../"// Verzeichnis angeben
 
$erg alle_dateien($verzeichnis$_POST["text"]);
 foreach (
$erg as $zaehler => $element) {
  
//$element = str_replace('\', '/', $element);
  
$element str_replace("\\"'/'$element);
  echo (
$zaehler+1) . '. <a href="'$element .'">'$element .'</a><br>';
 }
}

function 
alle_dateien($dir$text) {
 
$files = Array();
 
$file_tmp glob($dir '*'GLOB_MARK GLOB_NOSORT);
 foreach (
$file_tmp as $item) {
  if (
substr($item,-1) != DIRECTORY_SEPARATOR) {

/*/
   $type = substr($item, -3); // Originalausfuehrung
/*/
   
$temp explode('.'$item);
   
$type $temp[count($temp) - 1];
/**/

//   if (in_array($type, array("txt", "htm", "html", "xml", "csv", "php"))) { // geht in der Originalausfuehrung nicht fuer 'html'
//   if (in_array($type, array("txt", "htm", "tml", "xml", "csv", "php", ".js"))) { // geht in der Originalausfuehrung
   
if (in_array($type, array("txt""htm""html""xml""csv""php""js"))) {
    
$inhalt file_get_contents($item);
    if (
stristr($inhalt$text)) {
     
$files[] = $item;
    }
   }
  }
  else {
  
$files array_merge($filesalle_dateien($item$text));
  }
 }
 return 
$files;
}

?>
Werner schrieb am Donnerstag, den 9 Februar 2023 #2
Danke für die Korrektur,
das mit dem Backslash ist ein Fehler der Funktion highlight_string(), ich musste das so abändern:
$element = str_replace("\\\\", '/', $element);