Olá pessoal, tudo bem?!
Neste final de semana estive criando um pet project para praticar TDD, e foi direcionado a manipulação de diretórios.
E com isso resolvi criar este post para mostrar um recurso muito bom do PHP, sendo a classe nativa RecursiveDirectoryIterator, onde dispõem de um leque de ferramentas bacanas que podem facilitar sua vida.
Para realizarmos este post vamos criar um diretório ‘post_manipulando_diretorios_com_php’ e dentro dele vamos criar o arquivo index.php (onde iremos implementar nossos códigos) e mais 04 arquivos teste_01.txt, teste_02.txt, teste_03.txt e teste_04.txt. Após a criação da nossa estrutura básica vamos explorar o recurso.
Show me the code!!!
Para iniciar devemos instanciar nosso objeto.
$path = __DIR__ . '/';
$directory = new RecursiveDirectoryIterator( $path );
Como vimos é necessário passar o path onde iremos manipular. E temos como retorno um objeto do tipo RecursiveDirectoryIterator.
Após instanciarmos nosso objeto, podemos percorrê-lo em um laço de repetição para termos acesso aos arquivos e diretórios.
foreach ($directory as $file) {
var_dump($file);
}
Como retorno teremos:
object(RecursiveDirectoryIterator)[1]
private 'pathName' (SplFileInfo) => string '{FULL_PATH_PC}/teste_02.txt' (length=27)
private 'fileName' (SplFileInfo) => string 'teste_02.txt' (length=12)
private 'glob' (DirectoryIterator) => boolean false
private 'subPathName' => string '' (length=0)
Dentro do laço temos acesso a uma grande quantidade de métodos que podemos fazer uso para coletar diversas informações, vamos ver algumas dessas opções:
Get Base Name
foreach ($directory as $file) {
var_dump($file->getBaseName());
}
Retorno
'teste_02.txt' (length=12)
'index.php' (length=9)
'..' (length=2)
'.' (length=1)
'teste_01.txt' (length=12)
'teste_04.txt' (length=12)
'teste_03.txt' (length=12)
Com este recurso podemos obter o nome de todos os arquivos dentro do nosso diretório, podemos fazer isso em sub diretórios, para realizarmos acesso aos sub diretórios devemos realizar um laço recursivo 🙂
Get C Time
foreach ($directory as $file) {
var_dump($file->getCTime());
}
Retorno
473002325
1473003048
1472078760
1473002338
1473002319
1473002338
1473002333
Get File Name
foreach ($directory as $file) {
var_dump($file->getFileName());
}
Retorno
'teste_02.txt' (length=12)
'index.php' (length=9)
'..' (length=2)
'.' (length=1)
'teste_01.txt' (length=12)
'teste_04.txt' (length=12)
'teste_03.txt' (length=12)
Get Group
foreach ($directory as $file) {
var_dump($file->getGroup());
}
Retorno
1001
1001
1001
1001
1001
1001
1001
Temos uma lista bem extensa de funções que podemos utilizar para manipular diretórios e seus arquivos, podemos utilizar o getPat() onde irá retornar o caminho onde se encontra os arquivos, getPathname retornando o caminho completo contendo o nome do arquivo. Podemos verificar se é legível com isReadable() onde retorna true ou false e o método isWritable onde retorna se o arquivo é possível de ser gravado ou não.
Como vimos nos exemplos acima, as possibilidades são enormes e podemos manipular com facilidade diretórios e arquivos. Recomendo que acessem a documentação e analisem os outros recursos, que podem lhe poupar muitas linhas e horas de código quando o desafio é manipular diretórios e arquivos.
Podemos utilizar este recurso para criar arquivos do tipo zip por exemplo (no blog tenho um post que demonstra a criação de zip com PHP), ou qualquer outro formato, ficando restrito a nossa imaginação para implementar os recursos.
Espero que tenham gostado do post, curto porêm demonstra um recurso muito bacana que o PHP nos traz de forma nativa.
Até a próxima pessoal! 🙂