PHP - Unterverzeichnisse nach einem Dateinamen durchsuchen

Alle Unterverzeichnisse nach einem Dateinamen oder Inhalt durchsuchen und die gefundene Dateien als Link ausgeben.

[Bildschirmfoto]
 Alle Unterverzeichnisse nach einem Dateinamen durchsuchen
Alle Unterverzeichnisse nach einem Dateinamen durchsuchen

<?php

/*
 * Alle Unterverzeichnisse nach einem Dateinamen oder Inhalt durchsuchen
 * und die gefundene Dateien als Link ausgeben.
 */

// Verzeichnis angeben
$verzeichnis "./";

// Dateiendungen (Text-Dateien)
$dateiendungen = ["txt""htm""php"];

$suche = isset($_POST["text"]) ? $_POST["text"] : '';
$suche htmlspecialchars($suche);
$checked = isset($_POST["matchCase"]) ? ' checked="checked"' '';
$checked2 = isset($_POST["order"]) ? ' checked="checked"' '';
$checked3 = isset($_POST["files"]) ? ' checked="checked"' '';

echo 
'<form method="post">
 <label> Suche: <input type="search" name="text" value="' $suche '" size="40" required="required" autofocus="autofocus"></label>
 <input type="submit" value="los"><br>
 <label><input type="checkbox" name="matchCase"' $checked '> Groß- und Kleinschreibung beachten</label><br>
 <label><input type="checkbox" name="order"' $checked2 '> Sortierreihenfolge ändern</label><br>
 <label><input type="checkbox" name="files"' $checked3 '> Dateien (' implode(", "$dateiendungen) . ') öffnen und durchsuchen</label>
</form>';

if (
$_SERVER["REQUEST_METHOD"] == "POST") {
 
$ergebnis alle_dateien($verzeichnis$_POST["text"]);

 if (isset(
$_POST["order"])) {
  
rsort($ergebnis);
 }
 else {
  
natcasesort($ergebnis);
 }

 foreach (
$ergebnis as $zaehler => $element) {
  
$element str_replace('\\''/'$element);
  list(
$link$datum$bytes) = explode('|'$element);
  
$datum date("d.m.Y H:i"$datum);
  echo (
$zaehler+1) . '. <a href="'$link .'">'$link .'</a> <small>' $datum ' - ' $bytes ' Bytes</small><br>';
 }
}

function 
alle_dateien($dir$text) {
 global 
$dateiendungen;
 
$files = Array();
 
$file_tmp glob($dir '*'GLOB_MARK);

 foreach (
$file_tmp as $item) {

  if (
substr($item,-1) != DIRECTORY_SEPARATOR) {

   if (isset(
$_POST["files"]) &&
       
is_file($item)) {

    if (
in_array(substr($item, -3), $dateiendungen)) {
     
$text file_get_contents($item);

     if (!isset(
$_POST["matchCase"])) {
      
$text strtolower($text);
     }

     if (
substr_count($text$_POST["text"]) > 0) {
      
$files[] = $item '|' filemtime($item) .  '|' filesize($item);
     }
    }
   }
   else {

    if (isset(
$_POST["matchCase"])) {

     if (
strstr($item$text)) {
      
$files[] = $item '|' filemtime($item) .  '|' filesize($item);
     }
    }
    else {

     if (
stristr($item$text)) {
      
$files[] = $item '|' filemtime($item) .  '|' filesize($item);
     }
    }
   }
  }
  else {
  
$files array_merge($filesalle_dateien($item$text$_POST));
  }
 }
 return 
$files;
}
?>

Siehe auch: Den Inhalt aller Textdateien nach einem Suchbegriff durchsuchen, Dateien im Verzeichnis rekursiv auflisten, mit Filter, Suche nach Übereinstimmungen mit regulärem Ausdruck und Suchbegriffe hervorheben

Tipp

Kleine Suchmaschine - Diese Suchmaschine durchsucht das aktuelle Verzeichnis und/oder andere Verzeichnisse. Die Dateiendungen der Dateien die durchsucht werden sollen können angeben werden. Des weiteren ist es möglich ein Vorzeichen bei Dateien die nicht durchsucht werden sollen zu setzen und vieles mehr.

Bausteine  Alle Anzeigen

Eine zufällige Auswahl von Codeschnipseln aus den Bereichen HTML, CSS, PHP, JavaScript und MySQL.

<col> Tabellenspalten vordefinieren

CSS - Pop-up-Bucheffekt

PHP - Datum der nächsten sieben Tage ausgeben

JavaScript - CSS über Javascript einbinden

MySQL - Gleiche Datensätze anzeigen

Externe Linkliste
Links zu anderen Webseiten sollten nach Möglichkeit zentral auf einer Seite geschrieben werden — Grund: Sollte ein externer Link einmal nicht mehr funktionieren (z.B., wenn die Webseite gelöscht wurde), so lässt sich das leichter überprüfen, als wenn die externen Links auf fünfzig (oder mehr) Seiten verteilt sind.