Trabalho com o sistema de arquivos em PHP: funções principais e exemplos
Trabalhar com o sistema de arquivos é uma das tarefas-chave do desenvolvimento web. O PHP fornece um conjunto poderoso e flexível de funções para criar, ler, escrever, excluir arquivos e pastas, bem como para gerenciar permissões de acesso. Neste artigo, vamos analisar as principais capacidades do PHP para trabalhar com o sistema de arquivos, fornecer exemplos práticos e considerar erros típicos.
1. Leitura de arquivos em PHP
O PHP suporta várias maneiras de ler dados de arquivos. A escolha do método depende do tamanho do arquivo e do nível de controle necessário.
1.1. Função file_get_contents()
A maneira mais simples de ler um arquivo inteiro em uma string é usar file_get_contents(). Esta função é adequada para arquivos pequenos (configurações, templates).
<?php// Lendo o arquivo inteiro em uma string$content = file_get_contents('data.txt');if ($content !== false) { echo "Conteúdo do arquivo: " . htmlspecialchars($content);} else { echo "Erro ao ler o arquivo";}?>1.2. Função file()
Se você precisa obter o conteúdo do arquivo como um array de strings (uma linha por elemento), use file().
<?php$lines = file('log.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);foreach ($lines as $lineNum => $line) { echo "Linha " . ($lineNum + 1) . ": " . htmlspecialchars($line) . "<br>";}?>1.3. Leitura linha por linha com fopen() + fgets()
Para arquivos grandes (por exemplo, logs), é melhor usar leitura em fluxo para não manter o arquivo inteiro na memória.
<?php$handle = fopen('large_file.csv', 'r');if ($handle) { while (($buffer = fgets($handle, 4096)) !== false) { echo $buffer . "<br>"; } fclose($handle);} else { echo "Não foi possível abrir o arquivo";}?>2. Escrita de dados em arquivos
A escrita também pode ser realizada de diferentes maneiras. A principal diferença é sobrescrever o arquivo ou adicionar ao final.
2.1. Função file_put_contents()
Uma maneira rápida de escrever uma string em um arquivo. Se o arquivo não existir, ele será criado. Por padrão, o arquivo é sobrescrito.
<?php$data = "Nova entrada: " . date('Y-m-d H:i:s') . "";// Sobrescrever o arquivofile_put_contents('log.txt', $data);// Adicionar ao final (flag FILE_APPEND)file_put_contents('log.txt', $data, FILE_APPEND);?>2.2. Escrita manual através de fopen() + fwrite()
Para controle fino (por exemplo, bloqueio de arquivo), use o par fopen() / fwrite().
<?php$filename = 'counter.txt';$handle = fopen($filename, 'c+'); // 'c+' — cria o arquivo se ele não existirif (flock($handle, LOCK_EX)) { // bloqueio exclusivo $current = (int) fread($handle, filesize($filename) ?: 1); $current++; ftruncate($handle, 0); // limpa o arquivo rewind($handle); fwrite($handle, $current); flock($handle, LOCK_UN); // libera o bloqueio}fclose($handle);echo "Contador: $current";?>3. Trabalho com diretórios
O PHP permite não apenas gerenciar arquivos, mas também criar, excluir e visualizar pastas.
3.1. Criação de pastas (mkdir)
<?php// Criar uma pastaif (!is_dir('uploads')) { mkdir('uploads', 0755);}// Criação recursiva de pastas aninhadas (PHP 5.4+)mkdir('images/2024/12', 0755, true);?>3.2. Exclusão de pastas (rmdir)
rmdir() exclui apenas uma pasta vazia. Para excluir uma pasta com todo o seu conteúdo, é necessária uma função recursiva.
<?phpfunction deleteDirectory($dir) { if (!file_exists($dir)) { return true; } if (!is_dir($dir)) { return unlink($dir); } $items = array_diff(scandir($dir), ['.', '..']); foreach ($items as $item) {