1
resposta

Função de leitura de Diretório Recursiva em PHP

Boa tarde!

Uma sugestão de função de leitura de diretório Recursiva em PHP:

function PesquisaRecursiva(Directory $d, int $spaces) {
    while ($false !== ($entry = $d->read())) {
        if($entry == "." || $entry == "..") {
            continue;
        }
        for ($i = 0; $i < $spaces * 4; $i++) {
            echo "-";
        }
        if(is_dir($entry)) {
            $subDir = dir("$entry");
            PesquisaRecursiva($subDir, $spaces + 1);
        }
    }
}	
1 resposta

Olá, Vinicius!

Parece que você está tentando criar uma função recursiva para leitura de diretórios em PHP. A função que você compartilhou parece estar no caminho certo, porém, eu percebi que você está tentando ler um diretório sem verificar se o caminho atual é um diretório ou não.

Vamos ajustar um pouco a sua função:

function PesquisaRecursiva($dir, $spaces = 0) {
    if ($handle = opendir($dir)) {
        while (false !== ($entry = readdir($handle))) {
            if ($entry != "." && $entry != "..") {
                for ($i = 0; $i < $spaces * 4; $i++) {
                    echo "-";
                }
                echo "$entry\n";
                if (is_dir($dir . '/' . $entry)) {
                    PesquisaRecursiva($dir . '/' . $entry, $spaces + 1);
                }
            }
        }
        closedir($handle);
    }
}

Neste exemplo, a função PesquisaRecursiva recebe como argumento o caminho do diretório que você quer ler ($dir) e um parâmetro opcional para o número de espaços ($spaces). A função opendir($dir) abre o diretório e readdir($handle) lê cada entrada. Se a entrada não for . ou .. (que representam o diretório atual e o diretório pai, respectivamente), a função imprime a entrada e verifica se é um diretório. Se for, ela chama a si mesma com o novo caminho do diretório, aumentando o número de espaços.

Espero ter ajudado e bons estudos!