Depois de algum tempo sem postar, hoje decidi postar este artigo que estava no “gatilho” faz algum tempo =)
Aqui na agência onde eu trabalho tive que fazer uma classe que lista os arquivos de uma determinada pasta de todas as suas pastas “filhas”. Para fazer isso decidi fazer uma classe que retornasse todos os arquivos de forma simples, eu aponto a pasta e a classe me retorna o caminho de todos os arquivos que tem dentro dela.
Coloquei a classe aqui no blog mas não ficou muito boa não, então eu decidi, além de deixar a classe aqui, colocar em um arquivo de texto e fazer link.
< ?php
class buscaArquivos{
private $_pasta;
private $_filtro = array();
public $_arquivos = array();
/*
Contrutor da classe, ele cria o objeto seta a pasta de procura da classe como a
pasta raiz do site
*/
public function buscaArquivos(){
$pasta = ereg_replace(DIRECTORY_SEPARATOR."+", DIRECTORY_SEPARATOR , $_SERVER['DOCUMENT_ROOT']."/");
$this->_pasta = $pasta;
}
/*
função que retorna a atual pasta de consulta da classe
*/
public function getPasta(){
return $this->_pasta;
}
/*
função usada para setar a pasta em que a busca sera feita
*/
public function setPasta($pasta){
if($pasta != "") $this->_pasta = $pasta;
}
/*
função que retirna o nomero de arquivos encontrados pelas busca
*/
public function getNumeroArquivos(){
return count($this->_arquivos);
}
/*
função que retorna true se a extensao passada por parametro
se ela constar na lista de filtro
*/
public function checkFiltro($extensao) {
return in_array($extensao, $this->_filtro);
}
/*
retorna os arquivos que forma encontrados na busca
*/
public function getArquivos(){
return $this->_arquivos;
}
/*
função que adiciona uma extensao aos filtros da busca, a busca não vai retornar os arquivos com a extensao adicionada
*/
public function addFiltro($extensao){
if(!in_array($extensao, $this->_filtro))
$this->_filtro[] = trim($extensao);
}
/*
função que verifica se a pasta é um diretório , se sim ela executa a função que faz a busca
*/
public function procura(){
if(is_dir($this->_pasta)){
$this->listaArquivos($this->_pasta);
}
}
/*
função recursva que faz a busca
*/
private function listaArquivos($dir){
$handler = opendir($dir);
while (false !== ($file = readdir($handler))) {
if(!eregi("^[.]+$", $file)){
if(!is_dir($dir."/".$file)){
if(!empty($this->_filtro)){
if(!in_array(strtolower($this->getExtensao($file)), $this->_filtro))
$this->_arquivos[] = ereg_replace(DIRECTORY_SEPARATOR."+", DIRECTORY_SEPARATOR , $dir.$file);
}else
$this->_arquivos[] = $dir.$file;
}else $this->listaArquivos($dir.$file."/");
}
}
unset($handler);
}
/*
função que retorna o caminho não absoluto do arquivo
*/
public function retornaLink(){
$this->_arquivos = str_replace($_SERVER['DOCUMENT_ROOT'], "" , $this->_arquivos);
}
/*
função que retorna apenas o nome do arquivo e a extensao do arquivo
*/
static function retornaNome($iArquivoNome){
$iNome = explode("/",$iArquivoNome);
$iNome = end($iNome);
return $iNome;
}
/*
função que retorna o tamanho do arquivo, recebido por parametro, em KB
*/
static function retornaTamanho($iArquivo){
return number_format(filesize($_SERVER['DOCUMENT_ROOT'].$iArquivo) / 1024,2,",",".");
}
/*
função que retona a extenção do arquivo recebido por parametro
*/
static function getExtensao($iArquivo){
$extensao = explode(".",$iArquivo);
return end($extensao);
}
}
$arq = new buscaArquivos;
$arq->addFiltro("php"); //adiciona o filtro para a extensao php, assim ele não ira lista os arquivos com esta extenção
$arq->procura(); //efetua a busca na pasta determinada
echo "$arq->getNumeroArquivos() "; //monstra o número de arquivos que a busca encontrou.
?>
Download da classe que lista arquivos de uma pasta
Esta classe me trouxe grande benefícios e grande facilidades com operações deste tipo. Espero que possa ajudar a voce também e que voce.
QUALQUER elogio, sugestão ou critica será bem-vindo =)
Comentários Recenter