English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste tutorial, você aprenderá como usar PHP para manipular diretórios ou pastas.
No capítulo anterior, você aprendeu como usar arquivos no PHP. Da mesma forma, o PHP também permite que você use diretórios no sistema de arquivos, por exemplo, você pode abrir diretórios e ler seu conteúdo, criar ou excluir diretórios, listar todos os arquivos no diretório, etc.
Você pode usar a função PHP mkdir() passando o caminho e o nome do diretório a ser criado para criar um novo diretório vazio, conforme exemplo a seguir:
<?php //caminho do diretório $dir = "testdir" // verificar se o diretório existe if(!file_exists($dir)){ //tenta criar o diretório if(mkdir($dir)){ echo "sucesso na criação do diretório."; } else { echo "erro: não foi possível criar o diretório."; } } else { echo "erro: diretório já existe."; } ?>
Para que a função mkdir() funcione, o diretório pai do caminho de diretório passado como parâmetro já deve existir, por exemplo, se você especificar o caminho do diretório testdir/subdir maior que testdir de outra forma, o PHP gerará um erro.
Você pode usar a função PHP copy() passando o caminho de origem e o caminho de destino do arquivo como parâmetros para copiar o arquivo de um local para outro. Se o arquivo de destino já existir, ele será substituído. Este é um exemplo de criar uma cópia do arquivo "example.txt" em uma pasta de backup.
<?php //caminho do arquivo de origem $file = "example.txt" //caminho do arquivo de destino $newfile = "backup"/"example.txt" // verifica se o arquivo existe if(file_exists($file)){ //tenta copiar o arquivo if(copy($file, $newfile)){ echo "sucesso na cópia do arquivo."; } else { echo "erro: não foi possível copiar o arquivo."; } } else { echo "erro: arquivo não existe."; } ?>
Para que este exemplo funcione, deve já existirbackupo diretório de destino e o arquivo de origem "example.txt". Caso contrário, o PHP gerará um erro.
Você pode usar a função PHP scandir() para listar arquivos e diretórios dentro de um caminho especificado.
Agora, criaremos uma função personalizada que usará PHP recursivo para listar todos os arquivos no diretório. Se você estiver usando uma estrutura de diretórios profundamente aninhada, este script será muito útil.
<?php //define uma função para exibir os arquivos no diretório function outputFiles($path){ //verificar se o diretório existe if(file_exists($path) && is_dir($path)){ //escaneia os arquivos neste diretório $result = scandir($path); // filtra o atual (.) e o diretório pai (..) $files = array_diff($result, array('.', '..')); if(count($files) > 0){ //percorre a array reajustada foreach($files as $file){ se(is_file("$path"))/$file")){ //exibir o nome do arquivo echo $file . "<br>"; } else if(is_dir("$path/$file")){ //se encontrar o diretório, chamar recursivamente a função outputFiles("$path/$file"); } } } else { echo "erro: não foi encontrado arquivo no diretório."; } } else { echo "erro: o diretório não existe."; } } //chamar função outputFiles("mydir"); ?>
Às vezes, ao lidar com a estrutura de diretórios e arquivos, você pode precisar encontrar certos tipos de arquivos no diretório, como listar apenas arquivos .text ou .png, etc. Você pode fazer isso facilmente usando a função glob() do PHP, que coincide com arquivos com padrões.
O código PHP do exemplo a seguir procurará documents diretórios e listá-los todos com a extensão .text. Ele não procurará subdiretórios.
<?php /* */ foreach(glob("documents/*.txt) as $file){ echo basename($file) . " (tamanho: " . filesize($file) . " bytes)" . "<br>"; } ?>
A função glob() também pode ser usada para encontrar todos os arquivos em um diretório ou subdiretórios. O exemplo definido a seguir lista recursivamente todos os arquivos no diretório, como fizemos no exemplo anterior usando a função scandir().
<?php //definir função para exibir os arquivos no diretório function outputFiles($path){ //verificar se o diretório existe if(file_exists($path) && is_dir($path)){ // procurar arquivos no diretório $files = glob($path ."/*); if(count($files) > 0){ //percorrer o array ajustado foreach($files as $file){ if(is_file("$file")){ //apenas exibir o nome do arquivo echo basename($file) . "<br>"; } else if(is_dir("$file")){ //se encontrar o diretório, chamar recursivamente a função outputFiles("$file"); } } } else { echo "erro: não foi encontrado o arquivo neste diretório."; } } else { echo "erro: o diretório não existe."; } } //chamar função outputFiles("mydir"); ?>