Armadillo
Folding Member
Já me mandou o serviço do apache abaixo umas nao-sei-quantas vezes e é lento que nem um caracol!
Sugestoes para melhorar o meu script serao muito bem aceites!
O que o meu codigo faz é devolver num vector unidimensional (requisito imprescindivel) todas as pastas existentes, dado um caminho inicial.
Também nao consigo fazer uma pesquisa por um caminho do tipo "c:\programas", apenas "..\..\".
Acho que o codigo esta bem comentado. Se tiverem duvidas em relação a alguma coisa, buzinem
Ja agora, estou a usar a versao 4.4.3 do PHP.
Sugestoes para melhorar o meu script serao muito bem aceites!
O que o meu codigo faz é devolver num vector unidimensional (requisito imprescindivel) todas as pastas existentes, dado um caminho inicial.
PHP:
<?php
//exemplo de utilizacao da funcao
//Para devolver todos os ficheiros e directorios num vector, dado um caminho
// $filestructure = pesquisa_dir_recursivamente('caminho/a/pesquisar');
//Para devolver todos os ficheiros e directorios num vector, dado um caminho e uma extensao de ficheiro
// $filestructure = pesquisa_dir_recursivamente('caminho/a/pesquisar', 'extensao');
function pesquisa_dir_recursivamente($directorio, $filtro=FALSE)
{
if(substr($directorio,-1) == '/') //se o caminho tiver no fim uma barra
{
$directorio = substr($directorio,0,-1); // removemos.
}
if(!file_exists($directorio) || !is_dir($directorio)) //se caminho for invalido ou nao for um directorio...
{
return FALSE; // ... retorna FALSE e sai da funcao
}elseif(is_readable($directorio)) // ... se o caminho eh valido
{
$directorio_list = opendir($directorio); // abrimos o directorio
while (FALSE !== ($ficheiro = readdir($directorio_list))) // e procuramos items nele
{
if($ficheiro != '.' && $ficheiro != '..') //se apontador de ficheiro nao for o actual directorio ou o directorio pai
{
$path = $directorio.'/'.$ficheiro; //construimos o novo caminho a pesquisar
if(is_readable($path)) // se o caminho for valido
{
$subdirs = explode('/',$path); // dividimos o novo caminho em directorios
if(is_dir($path)) // se o novo caminho for um directorio
{
$directorio_tree[] = array($path,
pesquisa_dir_recursivamente($path, $filtro)); // pesquisamos o novo caminho chamando esta funcao (recursividade)
}
}
}
}
closedir($directorio_list); // fechar directorio
return $directorio_tree; // retornar a lista de ficheiros
}
else
{ // se o caminho nao for valido
return FALSE; // ... retorna FALSE
}
}
//testando funcoes
function listaArray(&$item2, $key)
{
global $pastas;
//echo "$item2<br>\n";
if (!is_array($item2) && !is_null($item2)) //se nao for um vector
{
$pastas[]=$item2; //adiciona item ao vector
}
array_walk($item2, 'listaArray');
}
$array = pesquisa_dir_recursivamente('..\..'); //ler disco em busca de dirs
array_walk($array, 'listaArray'); //retornar apenas as dirs
$pastas=array_unique($pastas); //remover possiveis duplicacoes nas pastas(caso dos null)
sort($pastas);
echo '<pre>';
var_dump ($pastas);
echo '</pre>';
Acho que o codigo esta bem comentado. Se tiverem duvidas em relação a alguma coisa, buzinem
Ja agora, estou a usar a versao 4.4.3 do PHP.
Última edição pelo moderador: