function ListagemDir($InitialDir, $WithSubDir) { if ($InitialDir[strlen($InitialDir)] == "/") //verificando se o ultimo char de diretorio inicial eh uma barra $dirs[0] = $InitialDir; else //caso seja, atribui ao primeiro elemento do vetor de diretorios $dirs[0] = $InitialDir . "/"; //caso contrario, atribui ao primeiro elemento do vetor de diretorios e maix uma barra $dir_atual = $dirs[0]; //atribuindo o valor do primeiro diretorio a ser verificado //Gerando a lista no diretório inicial if ($dir_open = @opendir($dir_atual)) //abrindo o primeiro diretorio { $contdirs = 0; //contador de total de diretorios e subdiretorios $contfiles = 0; //contador de total de arquivos while ($file = readdir($dir_open)) //loop - lendo cada arquivo do diretorio que foi aberto { if (($file <> ".") and ($file <> "..")) //checando se o arquivo atual eh o proprio diretorio atual ou um diretorio acima { if (is_dir($dir_atual . $file)) //se o arquivo atual for um diretorio { $cont_dirs++; //Incrementando o contador de diretorios $dirs[$cont_dirs] = $dir_atual . $file; //lista de diretorios recebe o diretorio encontrado } else { $files_dir[$cont_files] = $dir_atual; //lista de diretorios do arquivo recebe o diretorio do arquivo $files_name[$cont_files] = $file; //lista de arquivos recebe o nome do arquivo encontrado $cont_files++; //imcrementando o contador de arquivos } } } closedir($dir_open); //fecha o diretorio aberto if ($WithSubDir) //Verificando se foi indicado a inclusão de subdiretórios { for ($cont = 1; $cont < count($dirs); $cont++) //rodando o loop na lista de diretorios { $dir_atual = $dirs[$cont]; //diretorio atual recebe um item da lista if ($dir_open = @opendir($dir_atual)) //abrindo diretorio { while ($file = readdir($dir_open)) //daki pra frente eh igual tava lah em cima { if (($file <> ".") and ($file <> "..")) { if (is_dir($dir_atual . "/" . $file)) { $cont_dirs++; $dirs[$cont_dirs] = $dir_atual . "/" . $file; $items_d++; } else { $files_dir[$cont_files] = $dir_atual . "/"; $files_name[$cont_files] = $file; $cont_files++; $items_f++; } $items++; } } closedir($dir_open); } } } array_multisort($files_dir, $files_name); //organizando a lista de arquivos por ordem alfabetica reset($files_dir); //jogando o ponteiro do vetor para o inicio reset($files_name); while (list($index, $value) = each($files_dir)) $files[$index] = $files_dir[$index] . $files_name[$index]; //juntando o diretorio ao nome do arquivo e armazenando em um vetor return $files; //retornando o vetor de arquivos } else return false; //falha, retorando false a função }
Syntax:
ListagemDir($InitialDir, $WithSubDir)
$InitialDir (String) - Diretório a ser verificado
$WithSubDir (Boolean) - Especifica se os subdiretórios tambem devem sem verificados
Valor de retorno:
Se a função for executada com sucesso, o valor de retorno é um array contendo todos os arquivos do diretório
Caso, a função encontre algum erro, impedindo-a de ser executada, ela retorna False
--------------------
function FileSearch($mascara, $files) { //montando a expressao regular $mascara = str_replace(".*", "<pontoa>", $mascara); $mascara = str_replace(".", "<ponto>", $mascara); $mascara = str_replace("?", ".", $mascara); $mascara = str_replace("*", "[[:alnum:][:punct:]_ ]*", $mascara); $mascara = str_replace("<ponto>", "\.", $mascara); $mascara = str_replace("<pontoa>", "\.?", $mascara); $mascara .= "$"; $mascara = "/$mascara"; $mascara = explode(";", $mascara); reset($files); //jogando o poteiro ao inicio do vetor while (list($index, $value) = each($files)) { $value_temp = substr($value, strrpos($value, "/")); $cont = 0; while ($cont < count($mascara)) { if (eregi($mascara[$cont], $value_temp) > 0) $files_masked[$index] = $value; $cont++; } } if (isset($files_masked)) return $files_masked; else return false; }
Syntax:
FileSearch($mascara, $files)
$mascara (String) - Critérios de busca. ex.: *.jpg;*.gif
$files (Array) - Array contendo a lista de arquivos que serão examinados
Valor de retorno:
Se a função for executada com sucesso, o valor de retorno é um array contendo todos os arquivos que obedecem aos critérios de busca
Caso, a função encontre algum erro, impedindo-a de ser executada, ela retorna False
Bom, deu pra notar que o segundo parametro da segunda função pode ser conseguido, usando a primeira função, neh? hehehe
Vou dar um exemplo de como utilizar:
//mostrando como funciona a função $filelist = ListagemDir(".", true); if ($filelist != false) { $listagem = FileSearch("*.gif;*.jpg", $filelist); if ($listagem != false) { reset($listagem); while (list($index, $value) = each($listagem)) echo "<a href=\"$value\">$value</a><br>"; } }
esse exemplo acima ira criar uma listagem de links dos arquivos encontrados, que no caso podem qualquer arquivo de extensao GIF(*.gif) ou qualquer um de extensão JPG (*.jpg)... notem que coloquei um ponto "." para busca no diretório raiz do servidor, para busca em um subdiretório, basta colocah um caminhu, tipow "subdir/subdir", no raiz eh necessario o "."(ponto)...
Pagina no ar de exemplo
Blz... ixpero que goxtem
Edição feita por: keitarosan, 25/09/2003, 07:09.