Liest ein Verzeichnis/Ordner aus
Autor: Ralf v.d.Mark
eingetragen: Freitag, 22. Dezember 2017 um 09:52 Uhr (51/2017 Kalenderwoche)
geändert: Donnerstag, 20. Juli 2023 um 14:49 Uhr (29/2023 Kalenderwoche)
Keywords: Verzeichnis Ordner auslesen listen
Kategorien: PHP,
Text:
Liest ein Verzeichnis aus und gibt den Inhalt sortiert als Array zurück
Quellcode:
/**
* Liest ein Verzeichnis aus und listet den Inhalt sortiert im Array
*
* PHP version 8.2
*
* @copyright 2023, Ralf von der Mark
* @author Ralf von der Mark <ralf@vondy.de>, www.vondy.de
* @version 20.07.2023
*
*
* @name Funktion: verzeichnisAuslesen(...)
* @param string $pfad (z. B.: "/var/log/httpd/")
* @param string $sortg (Mögl. Sortierung: "name", "date", "typ", "size")
* @param string $sortaufab (Mögl. Sortierrichtung: "ASC" oder "DESC")
*
* @return array
* @example
* $verzeichnsArray = verzeichnisAuslesen('/var/www/htdocs/', 'name', 'ASC');
*
* Beispiel-Array:
* Array(
* [ordner] => Array(
* [ordnerName_1] => 'ordnerName_1',
* [ordnerName_2] => 'ordnerName_2',
* [ordnerName_3] => 'ordnerName_3'
* )
* [dateiName_1] => 'dateiName_1',
* [dateiName_2] => 'dateiName_2',
* [dateiName_3] => 'dateiName_3',
* [dateiName_4] => 'dateiName_4'
* )
* [INFO] => 3 Ordner / 4 Dateien
* [anzahl] => Array(
* [ordner] => 3,
* [dateien] => 4,
* [ordnerUndDateien] => 7
* )
* )
*/
function verzeichnisAuslesen(string $pfad, string $sortg = 'name', string $sortaufab = 'ASC')
{
if (!$lies_mal_verz = opendir($pfad)) {
return ['Das Verzeichnis "' . $pfad . '" konnte nicht geöffnet werden!'];
}//ENDE: if (!$lies_mal_verz = opendir($pfad))
//mehr als 89.999 Dateien/Ordner hat hoffentl. keiner in einem Ordner.
$zaehlerAllg = 10000;
$anzahl_dir = 0;//zaehler starten
$anzahl_file = 0;//zaehler starten
while (false !== ($filename = readdir($lies_mal_verz))) {
if ($filename !== '.' && $filename !== '..') {
$zaehlerAllg++;
if (is_dir($pfad . '/' . $filename)) {
//Ordner/Verzeichnisse auflisten:
$anzahl_dir++;
if (!empty($sortg) && $sortg === 'date') {
$sortierg = filemtime($pfad . '/' . $filename)
. strtolower($filename) . $zaehlerAllg;
} else {
$sortierg = strtolower($filename) . $zaehlerAllg;
}
$inhalt['ordner'][$sortierg] = $filename;
} else {
//Dateien auflisten:
$anzahl_file++;
if (!empty($sortg) && $sortg === 'typ') {
if (!$datei_ext = strrchr($filename, '.')) {
$datei_ext = 'zzz';
}
$sortierg = $datei_ext . strtolower($filename)
. $zaehlerAllg;
} elseif (!empty($sortg) && $sortg === 'date') {
$sortierg = filemtime($pfad . '/' . $filename)
. strtolower($filename) . $zaehlerAllg;
} elseif (!empty($sortg) && $sortg === 'size') {
$sortierg = filesize($pfad . '/' . $filename)
. strtolower($filename) . $zaehlerAllg;
} else {
$sortierg = strtolower($filename) . $zaehlerAllg;
}
$inhalt['dateien'][$sortierg] = $filename;
}
}//ENDE: if($filename != '.' || $filename != '..')
}//ENDE: while (false !== ($filename = readdir($lies_mal_verz)))
closedir($lies_mal_verz);//nach Verzeichnis-Auslesen wieder schliessen!
$tr = '';
$zahl = '';
if ($anzahl_dir != 0) {
$zahl .= $anzahl_dir;
$tr = ' Ordner / ';
}
if ($anzahl_file != 0) {
$zahl .= $tr . $anzahl_file . ' Dateien';
}
if ($anzahl_dir == 0 && $anzahl_file == 0) {
$zahl .= 'Das Verzeichnis ist leer!';
}
$inhalt['INFO'] = $zahl;
if ($anzahl_file > 0) {
if (!empty($sortaufab) && $sortaufab === 'DESC') {
krsort($inhalt['dateien']);
} else {
ksort($inhalt['dateien']);
}
}//ENDE: if ($zahler > 0)
if ($anzahl_dir > 0) {
if (!empty($sortaufab) && $sortaufab === 'DESC') {
krsort($inhalt['ordner']);
} else {
ksort($inhalt['ordner']);
}
}//ENDE: if ($zahler > 0)
$inhalt['anzahl']['ordner'] = $anzahl_dir;
$inhalt['anzahl']['dateien'] = $anzahl_file;
$inhalt['anzahl']['ordnerUndDateien'] = $anzahl_dir + $anzahl_file;
return $inhalt;
}//ENDE: function verzeichnisAuslesen(...)