Liest ein Verzeichnis/Ordner aus

edit | delete

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(...)