Armadillo Posted January 4, 2008 at 10:13 AM Report Share #157750 Posted January 4, 2008 at 10:13 AM 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. 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 sort($pastas); echo '<pre>'; var_dump ($pastas); echo '</pre>'; Também nao consigo fazer uma pesquisa por um caminho do tipo "c:\programas", apenas "..\..\". O que posso fazer para mudar isto? Acho que o codigo esta bem comentado. Se tiverem duvidas em relação ao meu codigo digam alguma coisa. Ja agora, estou a usar a versao 4.4.3 do PHP. Obrigado. Link to comment Share on other sites More sharing options...
djthyrax Posted January 4, 2008 at 08:13 PM Report Share #157875 Posted January 4, 2008 at 08:13 PM Também nao consigo fazer uma pesquisa por um caminho do tipo "c:\programas", apenas "..\..\". O que posso fazer para mudar isto? Tens de escapar as \. Ou seja, "C:\\Programas" e "..\\..\\" 😉 Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now