Utilidades Sistema de Arquivos

Capa Curso PHP
Tempo de leitura: 4 minutos

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çãoPropósitoExemplo 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çãoPropósitoExemplo 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) 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çãoPropósitoExemplo 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çãoPropósitoExemplo 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 (geralmente www-data ou apache).
  • 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:

SQL
SQL
Capa Curso PHP
PHP
Laravel
Laravel

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:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime
Author: Thiago Rossi
Com mais de 20 anos de jornada na tecnologia, minha trajetória evoluiu do ensino técnico à arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de soluções de Inteligência Artificial nativa e análise de dados públicos, utilizando o ecossistema PHP para transformar dados brutos em transparência e eficiência. Como autor e desenvolvedor, acredito na democratização do conhecimento. Essa visão resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura até os bastidores da indústria de Jogos e IA. No universo de Game Design, sou autor do livro "GDD – O Guia Definitivo" e documento ativamente meus processos através de DevLogs, unindo rigor técnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso é conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.