Carlos Serrão

as minhas notas e página pessoal…

Atravessar e listar directorias em PHP

| 4 Comments

Hoje, durante uma das sessões do curso de LAMP que estou a dar na Caixa Mágica Software, tentei fazer um exercício em que um script de PHP pudesse ser usado para listar e navegar nas várias directorias do sistema de ficheiros do sistema.

A solução não me parecia muito complexa, e era directa de implementar. No entanto, e por estranho que pareça, o script listava apenas a directoria de início, e quando se navegava para as sub-directorias, recusava-se a indicar as potenciais sub-directorias existentes.

Depois de voltar para casa e bater um pouco a cabeça, acabei por conceber uma solução que parece funcionar bem sem problemas. Aqui partilho a mesma convosco, pode ser que vos venha a ser útil.

<?
if(isset($_REQUEST['dirname']))
{
        $dir = $_REQUEST['dirname']; 
}
else
{
        $dir = getcwd();
}
        
echo "<b>".$dir."</b><br>";

$dh=opendir($dir);

if($dh==false) 
{
        echo "Nao consegui abrir a directoria...";
        exit;
}

while((false !== ($entry = readdir($dh))))
{ 
        if(isset($_REQUEST['dirname']))
                $fileentry = $dir.$entry;
        else
                $fileentry = $entry;

        if(is_dir($fileentry))
                echo '<b>'.$entry.'</b><br>';
        else
        {
                echo $entry."<br>";
        }
        
}
closedir($dh);
?>
  • Luís Miguel Silva

    E é propositado poder navegar para qualquer directório do sistema com esse código passando o dir pelo parametro “dirname”? :o)Hugz,Luís

  • Carlos Serrao

    Sim,é mesmo propositado… embora do ponto de vista de segurança seja um buraco de todo o tamanho. De qq forma, a segurança não era o objectivo do exercício em causa.Cps,

  • Nuno

    só uma sugestão:se calhar com uma função recursiva ficava espectacular! e arrumadinho.my 2csN.

  • Carlos Serrao

    Yeap,tens razão, eu depois vou tentar fazer uma versão recursiva. Assim, que tenha tempo faço isso.CHeers.

  • RSS
  • Twitter
  • Buzz
  • LinkedIn
  • Flickr