Utilidades Sistema de Arquivos: O PHP oferece um conjunto robusto de funções que permitem interagir diretamente com o sistema de arquivos do servidor, uma funcionalidade essencial para qualquer aplicação web que precise ler configurações, registrar logs, armazenar dados ou gerenciar uploads de usuários.
Dominar a manipulação de arquivos e diretórios é crucial para criar sistemas de gerenciamento de conteúdo e lidar com dados persistentes.
1. 📖 Leitura e Escrita de Arquivos (Conteúdo Direto)
As funções file_get_contents() e file_put_contents() são as formas mais simples e rápidas de interagir com arquivos pequenos, pois lidam com a abertura e o fechamento do arquivo automaticamente.
| Função | Propósito | Exemplo PHP |
file_get_contents(caminho) | Lê o conteúdo inteiro de um arquivo e o retorna como uma string. | $conteudo = file_get_contents("config.json"); |
file_put_contents(caminho, dado) | Escreve o $dado no arquivo, substituindo o conteúdo existente. | file_put_contents("log.txt", "Novo registro."); |
Exemplo de Uso Rápido
PHP
<?php
// Escrever em um arquivo
file_put_contents("novo_arquivo.txt", "Este é o novo conteúdo.");
// Ler e exibir o conteúdo
$conteudo = file_get_contents("novo_arquivo.txt");
echo $conteudo;
?>
2. 🗂️ Manipulação de Arquivos por Fluxo (Ponteiros)
Para arquivos muito grandes ou para operações sequenciais (como leitura bloco a bloco ou escrita incremental), você deve usar as funções baseadas em ponteiros (fluxo).
| Função | Propósito | Exemplo PHP |
fopen(caminho, modo) | Abre o arquivo no modo especificado ("r" para leitura, "w" para escrita/criação, "a" para anexar/append). | $arquivo = fopen("dados.txt", "r"); |
fread(ponteiro, bytes) | Lê um número específico de bytes. | $dados = fread($arquivo, 1024); // Lê 1KB |
fwrite(ponteiro, dado) | Escreve uma string no arquivo. | fwrite($arquivo, "Novo Log\n"); |
fclose(ponteiro) | Fecha o arquivo e libera o recurso. | fclose($arquivo); |
Exemplo de Fluxo (Escrita)
PHP
<?php
$ponteiro = fopen("log.txt", "a"); // Abre para anexar (append)
fwrite($ponteiro, "Acesso em " . date("Y-m-d H:i:s") . "\n");
fclose($ponteiro); // Sempre feche o ponteiro!
?>
3. 📂 Funções de Diretório
| Função | Propósito | Exemplo PHP |
mkdir(caminho) | Cria um novo diretório. | mkdir("novo_diretorio"); |
rmdir(caminho) | Remove um diretório, mas ele deve estar vazio. | rmdir("diretorio_vazio"); |
scandir(caminho) | Retorna um array com os arquivos e diretórios dentro de um caminho. | $arquivos = scandir("uploads"); |
is_dir(caminho) | Verifica se o caminho especificado é um diretório. | if (is_dir("uploads")) { ... } |
4. 🔍 Verificação e Metadados
| Função | Propósito | Exemplo PHP |
file_exists(caminho) | Verifica se um arquivo ou diretório existe. | if (file_exists("config.php")) { ... } |
is_file(caminho) | Verifica se o caminho é um arquivo regular. | if (is_file("dados.txt")) { ... } |
filesize(caminho) | Retorna o tamanho do arquivo em bytes. | echo filesize("imagem.jpg"); |
filemtime(caminho) | Retorna o horário da última modificação (timestamp). | $modificacao = filemtime("dados.txt"); |
5. ⏫ Upload de Arquivos: A Superglobal $_FILES
Para processar arquivos enviados através de um formulário HTML, você precisa da superglobal $_FILES.
Formulário HTML (Obrigatório)
O formulário deve ter o atributo enctype="multipart/form-data" e o método POST.
HTML
<form action="upload.php" method="post" enctype="multipart/form-data">
Selecione o arquivo: <input type="file" name="arquivo_usuario">
<input type="submit" value="Enviar">
</form>
Estrutura da $_FILES
Se o nome do campo no HTML for arquivo_usuario, a superglobal terá a seguinte estrutura após o envio:
PHP
$_FILES['arquivo_usuario'] = [
'name' => 'nome_original.jpg', // Nome original do arquivo no cliente
'type' => 'image/jpeg', // Tipo MIME do arquivo
'tmp_name' => '/tmp/phpXyZ', // Caminho temporário no servidor
'error' => 0, // Código de erro (0 = sucesso)
'size' => 123456 // Tamanho do arquivo em bytes
];
Processamento e Movimentação Segura
A função move_uploaded_file() é a única forma segura de mover um arquivo do diretório temporário para o local permanente no seu sistema.
PHP
<?php
if (isset($_FILES['arquivo_usuario']) && $_FILES['arquivo_usuario']['error'] == UPLOAD_ERR_OK) {
$nome_arquivo = basename($_FILES['arquivo_usuario']['name']); // Limpeza básica de nome
$tmp_name = $_FILES['arquivo_usuario']['tmp_name'];
$destino = "uploads/" . $nome_arquivo;
// Move de forma segura o arquivo temporário para o destino final
if (move_uploaded_file($tmp_name, $destino)) {
echo "Arquivo $nome_arquivo enviado com sucesso!";
} else {
echo "Erro ao mover arquivo.";
}
}
?>
6. ⚠️ Segurança e Boas Práticas
- Validação Rigorosa: Nunca confie apenas no tipo (
type) fornecido pelo navegador. Valide o tamanho (size) e o tipo de arquivo no servidor (verificando a extensão ou usando a extensão Fileinfo para MIME types reais). - Permissões (Perms): O diretório de uploads (
uploads/no exemplo) deve ter permissões de escrita para o usuário que executa o PHP (geralmentewww-dataouapache). - Renomeação: Para evitar ataques de diretório e colisões, sempre renomeie o arquivo no servidor (ex: usando um
uniqid()ou um hash) em vez de confiar no nome original.
✅ Conclusão Utilidades Sistema de Arquivos
Utilidades Sistema de Arquivos: A capacidade de interagir com o sistema de arquivos via file_get_contents/file_put_contents e as funções de fluxo (fopen, fread, etc.) é fundamental para a persistência de dados. Além disso, a superglobal $_FILES e a função move_uploaded_file() são as ferramentas essenciais para implementar uploads de arquivos de forma segura e eficiente em qualquer aplicação PHP.
Toda jornada tem um início, e o início para se tornar um desenvolvedor back-end é dominar as seguintes tecnologias, que você encontra aqui mesmo:
E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:












