Ein umfangreiches PHP Suche Script um nach den verschiedensten Dingen zu suchen.

<?php
/**
* Datei-Suchtool
*
* @description Dieses Skript ermöglicht die Suche nach Dateien basierend auf verschiedenen Kriterien wie Dateiinhalt, Dateiname, Dateityp und Änderungsdatum.
*
* @package DateiSuchtool
* @version 1.2.0
* @author Conny Henn <conny@hennweb.de>
* @copyright Copyright (c) 2023-2025 Conny Henn
* @license MIT License
* @link https://www.HennWeb.de
* @since 1.0.0
*
* Änderungshistorie:
* 1.2.0 - 2025-02-28
* - Hinzufügen der Möglichkeit, in Unterverzeichnissen zu suchen.
* - Verbesserung der Shell-basierten Suche.
* - Fehlerbehebungen und Optimierungen.
*
* 1.1.0 - 2023-09-30
* - Hinzufügen der Sortierfunktion nach Dateigröße, Datum und Name.
* - Verbesserung der Benutzeroberfläche.
*
* 1.0.0 - 2023-09-15
* - Erstveröffentlichung des Datei-Suchtools.
*/
// Pufferung der Ausgabe starten
ob_start();
// Funktion zum Hinzufügen mehrerer Dateitypen zum find-Befehl
function addFileTypesToCommand($cmd, $filetypes) {
// Prüfen, ob Eingabe leer ist
if (empty($filetypes)) {
return $cmd;
}
// Entfernen von Leerzeichen und Aufsplitten bei Kommas
$filetypes = explode(',', $filetypes);
// Wenn es nur einen Dateityp gibt
if (count($filetypes) === 1) {
return $cmd . " -name '*." . trim(escapeshellarg($filetypes[0]), "'\"") . "'";
}
// Mehrere Dateitypen mit -o (OR) verbinden
$cmd .= " \\( ";
$first = true;
foreach ($filetypes as $type) {
$type = trim($type);
if (empty($type)) continue;
if (!$first) {
$cmd .= " -o ";
}
$cmd .= "-name '*." . trim(escapeshellarg($type), "'\"") . "'";
$first = false;
}
$cmd .= " \\)";
return $cmd;
}
// Funktion zur Änderung des PHP-basierten Suchfilters für mehrere Dateitypen
function matchesFileType($extension, $filetypes) {
if (empty($filetypes)) {
return true;
}
$typeArray = array_map('trim', explode(',', $filetypes));
foreach ($typeArray as $type) {
if (strcasecmp($extension, $type) === 0) {
return true;
}
}
return false;
}
/**
* Extrahiert einen bestimmten Wert aus dem DocBlock der aktuellen Datei.
*
* @param string $key Der zu extrahierende Wert (z.B. "version", "author", "copyright")
* @return string Der extrahierte Wert oder "Unbekannt" wenn nicht gefunden
*/
function getInfoHead($key) {
// Den Quelltext der aktuellen Datei einlesen
$source = file_get_contents(__FILE__);
// Regulärer Ausdruck, um den DocBlock zu finden und zu extrahieren
preg_match('/\/\*\*.*?\*\//s', $source, $docblock);
if (!empty($docblock[0])) {
// Suchen nach der angegebenen Information
preg_match('/@' . preg_quote($key, '/') . '\s+(.+?)($|\n|\r)/i', $docblock[0], $match);
if (!empty($match[1])) {
return trim($match[1]);
}
}
return 'Unbekannt';
}
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Datei-Suchtool</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f4f4f4;
margin: 0;
padding: 20px;
}
.container {
max-width: 800px;
margin: 0 auto;
padding: 20px;
background-color: #fff;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
h1 {
text-align: center;
color: #333;
}
form {
margin-bottom: 20px;
}
label {
display: block;
margin-bottom: 8px;
font-weight: bold;
}
select, input[type="text"], input[type="submit"] {
width: 100%;
padding: 10px;
margin-bottom: 20px;
border-radius: 4px;
border: 1px solid #ccc;
box-sizing: border-box;
}
input[type="submit"] {
background-color: #007BFF;
color: white;
border: none;
cursor: pointer;
}
input[type="submit"]:hover {
background-color: #0056b3;
}
.spinner {
display: none;
margin: 0 auto;
border: 8px solid #f3f3f3;
border-top: 8px solid #007BFF;
border-radius: 50%;
width: 60px;
height: 60px;
animation: spin 2s linear infinite;
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
pre {
background-color: #f4f4f4;
padding: 10px;
border-radius: 4px;
border: 1px solid #ddd;
white-space: pre-wrap;
}
.checkbox-container {
margin-bottom: 20px;
}
.checkbox-container label {
display: inline;
font-weight: normal;
margin-left: 5px;
}
input[type="checkbox"] {
vertical-align: middle;
}
</style>
<script>
// Zeigt den Spinner an, wenn das Formular abgeschickt wird
function showSpinner() {
document.getElementById('spinner').style.display = 'block';
}
// Prüft, ob das Suchbegriff-Feld erforderlich ist, basierend auf der ausgewählten Suchart
function checkRequiredFields() {
var suchart = document.getElementById('suche').value;
var suchbegriff = document.getElementById('sbg');
var filetype = document.getElementById('filetype');
// Bei Suche nach Dateiänderungsdatum (Option 3) ist der Suchbegriff optional
if (suchart == '3') {
suchbegriff.removeAttribute('required');
} else {
// suchbegriff.setAttribute('required', 'required');
}
// Bei Suche nach Dateityp (Option 4) ist der Dateityp erforderlich
if (suchart == '4') {
filetype.setAttribute('required', 'required');
document.querySelector('label[for="filetype"]').innerHTML = 'Dateityp (erforderlich, durch Komma getrennt)';
} else {
filetype.removeAttribute('required');
document.querySelector('label[for="filetype"]').innerHTML = 'Dateityp (optional, durch Komma getrennt)';
}
}
// Funktion beim Laden der Seite ausführen
document.addEventListener('DOMContentLoaded', function() {
checkRequiredFields();
});
</script>
</head>
<body>
<div class="container">
<h1>Datei-Suchtool <?php echo getInfoHead("version"); ?></h1>
<form method="POST" onsubmit="showSpinner()">
<label for="suche">Suchart</label>
<select name="suche" id="suche" onchange="checkRequiredFields()">
<option value="1" <?php if (isset($_POST['suche']) && $_POST['suche'] == 1) echo 'selected'; ?>>Im Dateiinhalt suchen</option>
<option value="2" <?php if (isset($_POST['suche']) && $_POST['suche'] == 2) echo 'selected'; ?>>Nach Dateinamen suchen</option>
<option value="3" <?php if (isset($_POST['suche']) && $_POST['suche'] == 3) echo 'selected'; ?>>Nach Dateiänderungsdatum suchen</option>
<option value="4" <?php if (isset($_POST['suche']) && $_POST['suche'] == 4) echo 'selected'; ?>>Nach Dateityp suchen</option>
</select>
<label for="sbg">Suchbegriff oder Dateiname</label>
<input type="text" name="sbg" id="sbg" placeholder="Suchbegriff oder Dateiname eingeben" value="<?php if (isset($_POST['sbg'])) echo htmlspecialchars($_POST['sbg']); ?>">
<label for="filetype">Dateityp (optional, durch Komma getrennt)</label>
<input type="text" name="filetype" id="filetype" placeholder="z.B. txt, php, jpg" value="<?php if (isset($_POST['filetype'])) echo htmlspecialchars($_POST['filetype']); ?>">
<label for="days">Alter der Dateien in Tagen (optional)</label>
<input type="text" name="days" id="days" placeholder="z.B. -30 für weniger als 30 Tage alt" value="<?php if (isset($_POST['days'])) echo htmlspecialchars($_POST['days']); ?>">
<label for="sort">Sortieren nach</label>
<select name="sort" id="sort">
<option value="" <?php if (isset($_POST['sort']) && $_POST['sort'] == '') echo 'selected'; ?>>Keine Sortierung</option>
<option value="size" <?php if (isset($_POST['sort']) && $_POST['sort'] == 'size') echo 'selected'; ?>>Dateigröße</option>
<option value="date" <?php if (isset($_POST['sort']) && $_POST['sort'] == 'date') echo 'selected'; ?>>Datum</option>
<option value="name" <?php if (isset($_POST['sort']) && $_POST['sort'] == 'name') echo 'selected'; ?>>Dateiname</option>
</select>
<div class="checkbox-container">
<input type="checkbox" name="show_size" id="show_size" <?php if (isset($_POST['show_size'])) echo 'checked'; ?>>
<label for="show_size">Dateigröße anzeigen</label>
</div>
<div class="checkbox-container">
<input type="checkbox" name="show_datetime" id="show_datetime" <?php if (isset($_POST['show_datetime'])) echo 'checked'; ?>>
<label for="show_datetime">Datum und Uhrzeit anzeigen</label>
</div>
<div class="checkbox-container">
<input type="checkbox" name="search_subdirs" id="search_subdirs" <?php if (isset($_POST['search_subdirs'])) echo 'checked'; ?>>
<label for="search_subdirs">In Unterverzeichnissen suchen</label>
</div>
<input type="submit" value="Suchen">
<div>
Status: <?php if (function_exists('shell_exec') && is_callable('shell_exec')) {
echo "Schnellsuche aktiv - (shell_exec = on)";
} else {
echo "für schnellere Suche bitte an Hoster wenden um (shell_exec = on) zu aktivieren.";
}
?>
</div>
</form>
<div id="spinner" class="spinner"></div>
<?php
// Funktion zum Suchen nach Dateien ohne Verwendung von shell_exec()
function searchFiles($dir, $search, $filetype = '', $days = '', $searchContent = false, $searchSubdirs = true) {
$results = [];
// Iterator basierend auf der Checkbox auswählen
if ($searchSubdirs) {
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
} else {
$files = new DirectoryIterator($dir);
}
foreach ($files as $file) {
// Überspringe Verzeichnisse, wenn nicht in Unterverzeichnissen gesucht wird
if (!$searchSubdirs && $file->isDir()) continue;
// Überspringe Verzeichnisse, wenn in Unterverzeichnissen gesucht wird
if ($searchSubdirs && $file->isDir()) continue;
// Dateityp-Filter
if ($filetype && !matchesFileType($file->getExtension(), $filetype)) continue;
// Datumsfilter
if ($days) {
$fileTime = filemtime($file->getRealPath());
if ($days < 0 && time() - $fileTime > abs($days) * 86400) continue;
if ($days > 0 && time() - $fileTime < $days * 86400) continue;
}
// Suche nach Dateiänderungsdatum (Suchbegriff optional)
if (empty($search) && $searchContent === false) {
$results[] = [
'path' => $file->getRealPath(),
'date' => date("Y-m-d H:i:s", filemtime($file->getRealPath())),
'size' => filesize($file->getRealPath())
];
continue;
}
// Suche im Dateiinhalt oder Dateinamen
if ($searchContent) {
if (stripos(file_get_contents($file->getRealPath()), $search) !== false) {
$results[] = [
'path' => $file->getRealPath(),
'date' => date("Y-m-d H:i:s", filemtime($file->getRealPath())),
'size' => filesize($file->getRealPath())
];
}
} else {
if (stripos($file->getFilename(), $search) !== false) {
$results[] = [
'path' => $file->getRealPath(),
'date' => date("Y-m-d H:i:s", filemtime($file->getRealPath())),
'size' => filesize($file->getRealPath())
];
}
}
}
return $results;
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$suche = intval($_POST['suche']);
$sbg = isset($_POST['sbg']) ? $_POST['sbg'] : '';
$filetype = !empty($_POST['filetype']) ? $_POST['filetype'] : '';
$days = !empty($_POST['days']) ? intval($_POST['days']) : '';
$sort = $_POST['sort'];
$show_datetime = isset($_POST['show_datetime']);
$show_size = isset($_POST['show_size']);
$searchSubdirs = isset($_POST['search_subdirs']);
// Prüfen, ob shell_exec erlaubt ist
if (function_exists('shell_exec') && is_callable('shell_exec')) {
// Shell-basierte Suche
if ($suche == 1) {
// Basisbefehl für die Suche
$cmd = "find .";
// Wenn nicht in Unterverzeichnissen gesucht werden soll
if (!$searchSubdirs) {
$cmd .= " -maxdepth 1";
}
// Dateityp-Filter hinzufügen
if (!empty($filetype)) {
$cmd = addFileTypesToCommand($cmd, $filetype);
} else {
// Unerwünschte Dateitypen ausschließen
$cmd .= " ! -path '*.png' ! -path '*.jpg' ! -path '*.webp' ! -path '*.pdf'";
}
// Grep-Befehl für die Suche im Inhalt
$cmd .= " -type f -exec grep -l " . escapeshellarg($sbg) . " {} \\;";
// Wenn Datum oder Größe angezeigt werden sollen oder sortiert werden soll,
// müssen wir die Ergebnisse in eine temporäre Datei speichern und dann verarbeiten
if ($show_datetime || $show_size || !empty($sort)) {
$tempFile = tempnam(sys_get_temp_dir(), 'search_');
$cmd .= " > " . escapeshellarg($tempFile);
// Ersten Befehl ausführen
shell_exec($cmd);
// Zweiter Befehl zum Formatieren und Sortieren der Ergebnisse
$cmd2 = "cat " . escapeshellarg($tempFile) . " | xargs -I{} find {} ";
// Format basierend auf Checkboxen
if ($show_datetime && $show_size) {
$cmd2 .= "-printf '%TY-%Tm-%Td %TH:%TM:%TS %s %p\\n' | sed 's/\\.[0-9]\\+//' | awk '{printf \"%s %s %12d %s\\n\", \$1, \$2, \$3, \$4}'";
} elseif ($show_datetime && !$show_size) {
$cmd2 .= "-printf '%TY-%Tm-%Td %TH:%TM:%TS %p\\n' | sed 's/\\.[0-9]\\+//' | awk '{printf \"%s %s %s\\n\", \$1, \$2, \$3}'";
} elseif (!$show_datetime && $show_size) {
$cmd2 .= "-printf '%s %p\\n' | awk '{printf \"%12d %s\\n\", \$1, \$2}'";
} else {
$cmd2 .= "-printf '%p\\n'";
}
// Sortierung hinzufügen
if ($sort == "size") {
if ($show_size && $show_datetime) {
$cmd2 .= " | sort -k3 -n";
} elseif ($show_size && !$show_datetime) {
$cmd2 .= " | sort -k1 -n";
} else {
$cmd2 = "cat " . escapeshellarg($tempFile) . " | xargs -I{} find {} -printf '%s %p\\n' | sort -k1 -n";
if (!$show_size) {
$cmd2 .= " | awk '{print \$2}'";
} else {
$cmd2 .= " | awk '{printf \"%12d %s\\n\", \$1, \$2}'";
}
}
} elseif ($sort == "date") {
if ($show_datetime) {
$cmd2 .= " | sort -k1,2";
} else {
$cmd2 = "cat " . escapeshellarg($tempFile) . " | xargs -I{} find {} -printf '%TY-%Tm-%Td %TH:%TM:%TS %p\\n' | sort -k1,2";
if ($show_size) {
$cmd2 = "cat " . escapeshellarg($tempFile) . " | xargs -I{} find {} -printf '%TY-%Tm-%Td %TH:%TM:%TS %s %p\\n' | sort -k1,2 | sed 's/\\.[0-9]\\+//'";
$cmd2 .= " | awk '{printf \"%12d %s\\n\", \$3, \$4}'";
} else {
$cmd2 .= " | sed 's/\\.[0-9]\\+//' | awk '{print \$3}'";
}
}
} elseif ($sort == "name") {
if ($show_datetime && $show_size) {
$cmd2 .= " | sort -k4";
} elseif ($show_datetime && !$show_size) {
$cmd2 .= " | sort -k3";
} elseif (!$show_datetime && $show_size) {
$cmd2 .= " | sort -k2";
} else {
$cmd2 .= " | sort";
}
}
echo "<h2>Befehl für Inhaltssuche:</h2>";
echo "<pre>$cmd\n$cmd2</pre>";
// Befehl ausführen und Ergebnis ausgeben
$output = shell_exec($cmd2);
// Temporäre Datei löschen
unlink($tempFile);
if (empty($output)) {
echo "<p>Keine Dateien gefunden.</p>";
} else {
echo "<pre>$output</pre>";
}
} else {
// Standard-Ausgabe ohne zusätzliche Formatierung
echo "<h2>Befehl für Inhaltssuche:</h2>";
echo "<pre>$cmd</pre>";
$output = shell_exec($cmd);
if (empty($output)) {
echo "<p>Keine Dateien gefunden.</p>";
} else {
echo "<pre>$output</pre>";
}
}
} elseif ($suche == 2) {
$cmd = "find . -iname " . escapeshellarg("*" . $sbg . "*");
// Dateityp-Filter hinzufügen
if (!empty($filetype)) {
$cmd = addFileTypesToCommand($cmd, $filetype);
}
// Format basierend auf Checkboxen
if ($show_datetime && $show_size) {
$cmd .= " -printf '%TY-%Tm-%Td %TH:%TM:%TS %s %p\\n' | sed 's/\\.[0-9]\\+//' | awk '{printf \"%s %s %12d %s\\n\", \$1, \$2, \$3, \$4}'";
} elseif ($show_datetime && !$show_size) {
$cmd .= " -printf '%TY-%Tm-%Td %TH:%TM:%TS %p\\n' | sed 's/\\.[0-9]\\+//' | awk '{printf \"%s %s %s\\n\", \$1, \$2, \$3}'";
} elseif (!$show_datetime && $show_size) {
$cmd .= " -printf '%s %p\\n' | awk '{printf \"%12d %s\\n\", \$1, \$2}'";
} else {
$cmd .= " -printf '%p\\n'";
}
// Wenn nicht in Unterverzeichnissen gesucht werden soll
if (!$searchSubdirs) {
$cmd .= " -maxdepth 1";
}
// Sortierung
if ($sort == "size") {
if ($show_size && $show_datetime) {
$cmd .= " | sort -k3 -n";
} elseif ($show_size && !$show_datetime) {
$cmd .= " | sort -k1 -n";
} else {
// Wenn Dateigröße nicht angezeigt wird, trotzdem danach sortieren
$cmd = "find . -iname " . escapeshellarg("*" . $sbg . "*");
if (!empty($filetype)) {
$cmd = addFileTypesToCommand($cmd, $filetype);
}
$cmd .= " -printf '%s %p\\n' | sort -k1 -n | awk '{print \$2}'";
}
} elseif ($sort == "date") {
if ($show_datetime) {
$cmd .= " | sort -k1,2";
} else {
// Wenn Datum nicht angezeigt wird, trotzdem danach sortieren
$cmd = "find . -iname " . escapeshellarg("*" . $sbg . "*");
if (!empty($filetype)) {
$cmd = addFileTypesToCommand($cmd, $filetype);
}
if ($show_size) {
$cmd .= " -printf '%TY-%Tm-%Td %TH:%TM:%TS %s %p\\n' | sort -k1,2 | sed 's/\\.[0-9]\\+//' | awk '{printf \"%12d %s\\n\", \$3, \$4}'";
} else {
$cmd .= " -printf '%TY-%Tm-%Td %TH:%TM:%TS %p\\n' | sort -k1,2 | sed 's/\\.[0-9]\\+//' | awk '{print \$3}'";
}
}
} elseif ($sort == "name") {
if ($show_datetime && $show_size) {
$cmd .= " | sort -k4";
} elseif ($show_datetime && !$show_size) {
$cmd .= " | sort -k3";
} elseif (!$show_datetime && $show_size) {
$cmd .= " | sort -k2";
} else {
$cmd .= " | sort";
}
}
echo "<h2>Befehl: $cmd</h2>";
flush();
$output = shell_exec($cmd);
if (empty($output)) {
echo "<p>Keine Dateien gefunden.</p>";
} else {
echo "<pre>$output</pre>";
}
} elseif ($suche == 3) {
$cmd = "find .";
// Suchbegriff nur hinzufügen, wenn angegeben
if (!empty($sbg)) {
$cmd .= " -iname " . escapeshellarg("*" . $sbg . "*");
}
// Dateityp-Filter hinzufügen
if (!empty($filetype)) {
$cmd = addFileTypesToCommand($cmd, $filetype);
}
if (!empty($days)) {
$cmd .= " -mtime ".escapeshellarg($days);
}
// Wenn nicht in Unterverzeichnissen gesucht werden soll
if (!$searchSubdirs) {
$cmd .= " -maxdepth 1";
}
// Format basierend auf Checkboxen
if ($show_datetime && $show_size) {
$cmd .= " -printf '%TY-%Tm-%Td %TH:%TM:%TS %s %p\\n' | sed 's/\\.[0-9]\\+//' | awk '{printf \"%s %s %12d %s\\n\", \$1, \$2, \$3, \$4}'";
} elseif ($show_datetime && !$show_size) {
$cmd .= " -printf '%TY-%Tm-%Td %TH:%TM:%TS %p\\n' | sed 's/\\.[0-9]\\+//' | awk '{printf \"%s %s %s\\n\", \$1, \$2, \$3}'";
} elseif (!$show_datetime && $show_size) {
$cmd .= " -printf '%s %p\\n' | awk '{printf \"%12d %s\\n\", \$1, \$2}'";
} else {
$cmd .= " -printf '%p\\n'";
}
// Sortierung hinzufügen
if ($sort == "size") {
if ($show_size && $show_datetime) {
$cmd .= " | sort -k3 -n"; // Sortierung nach Dateigröße (3. Spalte, numerisch)
} elseif ($show_size && !$show_datetime) {
$cmd .= " | sort -k1 -n"; // Sortierung nach Dateigröße (1. Spalte, numerisch)
} else {
// Wenn Dateigröße nicht angezeigt wird, müssen wir sie trotzdem für die Sortierung bekommen
$cmd = "find .";
// Suchbegriff nur hinzufügen, wenn angegeben
if (!empty($sbg)) {
$cmd .= " -iname " . escapeshellarg("*" . $sbg . "*");
}
if (!empty($filetype)) {
$cmd = addFileTypesToCommand($cmd, $filetype);
}
if (!empty($days)) {
$cmd .= " -mtime ".escapeshellarg($days);
}
$cmd .= " -printf '%s %p\\n' | sort -k1 -n | awk '{print \$2}'";
}
} elseif ($sort == "date") {
if ($show_datetime) {
$cmd .= " | sort -k1,2"; // Sortierung nach Datum und Zeit (Spalten 1-2)
} else {
// Wenn Datum nicht angezeigt wird, müssen wir es trotzdem für die Sortierung bekommen
$cmd = "find .";
// Suchbegriff nur hinzufügen, wenn angegeben
if (!empty($sbg)) {
$cmd .= " -iname " . escapeshellarg("*" . $sbg . "*");
}
if (!empty($filetype)) {
$cmd = addFileTypesToCommand($cmd, $filetype);
}
if (!empty($days)) {
$cmd .= " -mtime ".escapeshellarg($days);
}
if ($show_size) {
$cmd .= " -printf '%TY-%Tm-%Td %TH:%TM:%TS %s %p\\n' | sort -k1,2 | sed 's/\\.[0-9]\\+//' | awk '{printf \"%12d %s\\n\", \$3, \$4}'";
} else {
$cmd .= " -printf '%TY-%Tm-%Td %TH:%TM:%TS %p\\n' | sort -k1,2 | sed 's/\\.[0-9]\\+//' | awk '{print \$3}'";
}
}
} elseif ($sort == "name") {
if ($show_datetime && $show_size) {
$cmd .= " | sort -k4"; // Sortierung nach Dateiname (4. Spalte)
} elseif ($show_datetime && !$show_size) {
$cmd .= " | sort -k3"; // Sortierung nach Dateiname (3. Spalte)
} elseif (!$show_datetime && $show_size) {
$cmd .= " | sort -k2"; // Sortierung nach Dateiname (2. Spalte)
} else {
$cmd .= " | sort"; // Sortierung nach Dateiname (1. Spalte)
}
}
echo "<h2>Befehl: $cmd</h2>";
flush();
$output = shell_exec($cmd);
if (empty($output)) {
echo "<p>Keine Dateien gefunden.</p>";
} else {
echo "<pre>$output</pre>";
}
} elseif ($suche == 4) {
// Bei Suche nach Dateityp muss der Dateityp angegeben sein
if (empty($filetype)) {
echo "<p>Fehler: Bitte geben Sie mindestens einen Dateityp an.</p>";
} else {
$cmd = "find .";
// Dateityp-Filter hinzufügen
$cmd = addFileTypesToCommand($cmd, $filetype);
// Dateiänderungsdatum hinzufügen, wenn angegeben
if ($days) {
$cmd .= " -mtime $days";
}
// Format basierend auf Checkboxen
if ($show_datetime && $show_size) {
$cmd .= " -printf '%TY-%Tm-%Td %TH:%TM:%TS %s %p\\n' | sed 's/\\.[0-9]\\+//' | awk '{printf \"%s %s %12d %s\\n\", \$1, \$2, \$3, \$4}'";
} elseif ($show_datetime && !$show_size) {
$cmd .= " -printf '%TY-%Tm-%Td %TH:%TM:%TS %p\\n' | sed 's/\\.[0-9]\\+//' | awk '{printf \"%s %s %s\\n\", \$1, \$2, \$3}'";
} elseif ($show_datetime && $show_size) {
$cmd .= " -printf '%TY-%Tm-%Td %TH:%TM:%TS %s %p\\n' | sed 's/\\.[0-9]\\+//' | awk '{printf \"%s %s %12d %s\\n\", \$1, \$2, \$3, \$4}'";
} elseif ($show_datetime && !$show_size) {
$cmd .= " -printf '%TY-%Tm-%Td %TH:%TM:%TS %p\\n' | sed 's/\\.[0-9]\\+//' | awk '{printf \"%s %s %s\\n\", \$1, \$2, \$3}'";
} elseif (!$show_datetime && $show_size) {
$cmd .= " -printf '%s %p\\n' | awk '{printf \"%12d %s\\n\", \$1, \$2}'";
} else {
$cmd .= " -printf '%p\\n'";
}
// Wenn nicht in Unterverzeichnissen gesucht werden soll
if (!$searchSubdirs) {
$cmd .= " -maxdepth 1";
}
// Sortierung
if ($sort == "size") {
if ($show_size && $show_datetime) {
$cmd .= " | sort -k3 -n";
} elseif ($show_size && !$show_datetime) {
$cmd .= " | sort -k1 -n";
} else {
// Wenn Dateigröße nicht angezeigt wird, trotzdem danach sortieren
$cmd = "find .";
$cmd = addFileTypesToCommand($cmd, $filetype);
if ($days) {
$cmd .= " -mtime $days";
}
$cmd .= " -printf '%s %p\\n' | sort -k1 -n | awk '{print \$2}'";
}
} elseif ($sort == "date") {
if ($show_datetime) {
$cmd .= " | sort -k1,2";
} else {
// Wenn Datum nicht angezeigt wird, trotzdem danach sortieren
$cmd = "find .";
$cmd = addFileTypesToCommand($cmd, $filetype);
if ($days) {
$cmd .= " -mtime $days";
}
if ($show_size) {
$cmd .= " -printf '%TY-%Tm-%Td %TH:%TM:%TS %s %p\\n' | sort -k1,2 | sed 's/\\.[0-9]\\+//' | awk '{printf \"%12d %s\\n\", \$3, \$4}'";
} else {
$cmd .= " -printf '%TY-%Tm-%Td %TH:%TM:%TS %p\\n' | sort -k1,2 | sed 's/\\.[0-9]\\+//' | awk '{print \$3}'";
}
}
} elseif ($sort == "name") {
if ($show_datetime && $show_size) {
$cmd .= " | sort -k4";
} elseif ($show_datetime && !$show_size) {
$cmd .= " | sort -k3";
} elseif (!$show_datetime && $show_size) {
$cmd .= " | sort -k2";
} else {
$cmd .= " | sort";
}
}
echo "<h2>Befehl: $cmd</h2>";
flush();
$output = shell_exec($cmd);
if (empty($output)) {
echo "<p>Keine Dateien gefunden.</p>";
} else {
echo "<pre>$output</pre>";
}
}
}
} else {
// PHP-basierte Suche
echo "<h2>Ergebnisse der Suche (PHP-basiert):</h2>";
if ($suche == 1) {
$results = searchFiles('.', $sbg, $filetype, $days, true);
} elseif ($suche == 2) {
$results = searchFiles('.', $sbg, $filetype, $days, false);
} elseif ($suche == 3) {
$results = searchFiles('.', $sbg, $filetype, $days, false);
} elseif ($suche == 4) {
if (empty($filetype)) {
echo "<p>Fehler: Bitte geben Sie mindestens einen Dateityp an.</p>";
$results = [];
} else {
// Bei Option 4 wird der Suchbegriff ignoriert und nur nach Dateityp gesucht
$results = searchFiles('.', '', $filetype, $days, false);
}
}
// Sortieren der Ergebnisse
if ($sort == "size") {
usort($results, function($a, $b) {
return $a['size'] - $b['size'];
});
} elseif ($sort == "date") {
usort($results, function($a, $b) {
return strtotime($a['date']) - strtotime($b['date']);
});
} elseif ($sort == "name") {
usort($results, function($a, $b) {
return strcmp($a['path'], $b['path']);
});
}
if (!empty($results)) {
echo "<pre>";
foreach ($results as $result) {
$output = "";
if ($show_datetime) {
$output .= $result['date'] . " ";
}
if ($show_size) {
$output .= sprintf("%12d ", $result['size']);
}
$output .= $result['path'];
echo $output . "\n";
}
echo "</pre>";
} else {
echo "<p>Keine Dateien gefunden.</p>";
}
}
}
// Spinner ausblenden, nachdem die gesamte Ausgabe erfolgt ist
echo "<script>document.getElementById('spinner').style.display = 'none';</script>";
// Pufferung der Ausgabe beenden und senden
ob_end_flush();
?>
</div>
</body>
</html>