PHP: ricorsione e listati di directory

PHP: ricorsione e listati di directory

In PHP la ricorsione trova una sua applicazione pratica nell'enumerazione dei file presenti in un albero di directory. Vediamo in dettaglio questa soluzione.

Possiamo definire la seguente funzione:


function my_get_dir_contents($dir = '', &$results = []) {

    $files = scandir($dir);

    foreach ($files as $key => $value) {

        $path = realpath($dir . DIRECTORY_SEPARATOR . $value);

        if (!is_dir($path)) {
            $results[] = $path;
        } else if ($value !== "." && $value !== "..") {
            my_get_dir_contents($path, $results);
            $results[] = $path;
        }
    }

    return $results;
}

La ricorsione infinita, un problema noto con questo tipo di implementazione, viene evitata effettuando una verifica sul percorso corrente: nel caso di un file, viene semplicemente aggiunto il percorso all'array passato come secondo argomento, mentre se si tratta di una directory, viene invocata ricorsivamente la funzione stessa usando il percorso gestito dal primo parametro della funzione.

Torna su