W3docs

fopen()

A função fopen() é uma função PHP integrada usada para abrir um arquivo e retorna um ponteiro de arquivo para leitura ou escrita.

O que é a Função fopen()?

A função fopen() é uma função PHP integrada que abre um arquivo (ou uma URL) e retorna um ponteiro de arquivo — um identificador de recurso que você passa para funções como fread(), fwrite(), fgets() e fclose() para efetivamente ler, escrever e fechar o fluxo. Em caso de falha, retorna false e emite um E_WARNING.

Quase toda operação de arquivo em PHP que lê ou escreve de forma incremental começa com fopen(). (Para leituras e escritas únicas, normalmente você usa file_get_contents() e file_put_contents() — veja Quando não usar fopen().)

Sintaxe

fopen(string $filename, string $mode, bool $use_include_path = false, $context = null): resource|false
ParâmetroDescrição
$filenameCaminho para o arquivo, ou uma URL (ex.: https://…, php://stdin) quando wrappers estão habilitados.
$modeComo abrir o arquivo — leitura, escrita, acréscimo, etc. Consulte a tabela abaixo.
$use_include_pathSe true, o PHP também pesquisa o include_path pelo arquivo.
$contextUm contexto de fluxo opcional criado com stream_context_create().

Retorna um recurso de ponteiro de arquivo em caso de sucesso, ou false em caso de falha.

Modos do fopen()

O argumento $mode é a parte que as pessoas erram com mais frequência. Ele controla se o arquivo é lido, escrito ou ambos, onde o ponteiro interno começa e se o arquivo é truncado ou se deve existir previamente.

ModoLeituraEscritaPonteiro começa emTrunca?Se o arquivo não existe
rsimnãoinícionãoaviso, retorna false
r+simsiminícionãoaviso, retorna false
wnãosiminíciosimcria o arquivo
w+simsiminíciosimcria o arquivo
anãosimfimnãocria o arquivo
a+simsimfim (escritas sempre acrescentam)nãocria o arquivo
xnãosiminícionãocria o arquivo; falha se existir
x+simsiminícionãocria o arquivo; falha se existir

Você pode acrescentar b (binário, ex.: 'rb') ou t (texto) a qualquer modo. Sempre use 'b' para arquivos não textuais como imagens ou executáveis — no Windows, o modo texto traduz silenciosamente as terminações de linha e corrompe dados binários. No Unix, os dois são idênticos, portanto 'b' é o padrão seguro em qualquer ambiente.

Exemplo básico: lendo um arquivo

Abra um arquivo no modo de leitura, leia seu conteúdo e feche-o. Sempre verifique o valor de retorno antes de usar o identificador, e sempre use fclose() ao terminar para que o sistema operacional possa liberar o descritor.

<?php

$filename = 'myfile.txt';
$file = fopen($filename, 'r');

if ($file === false) {
    echo "Unable to open file!";
} else {
    echo fread($file, filesize($filename));
    fclose($file);
}

Abrimos myfile.txt no modo somente leitura e verificamos o identificador com uma comparação estrita === false — isso importa porque um recurso válido é verdadeiro, mas alguns valores sem erro também são, então verificações soltas podem te prejudicar mais tarde.

Escrevendo em um arquivo

Abrir com 'w' cria o arquivo se não existir e o trunca para comprimento zero se existir. Use 'a' quando quiser adicionar ao final sem apagar o que já existe (útil para arquivos de log).

<?php

$file = fopen('log.txt', 'w');     // create / overwrite
fwrite($file, "First line\n");
fwrite($file, "Second line\n");
fclose($file);

$file = fopen('log.txt', 'a');     // append, keep existing content
fwrite($file, "Appended later\n");
fclose($file);

echo file_get_contents('log.txt');

Isso imprime as três linhas porque 'a' adicionou ao arquivo em vez de substituí-lo. Consulte fwrite() para o lado da escrita e feof() para detectar o fim do arquivo em loops.

Lendo linha por linha

Para arquivos grandes, não leia tudo na memória de uma vez. Combine fopen() com fgets() e feof() para transmitir uma linha por vez:

<?php

$file = fopen('myfile.txt', 'r');
if ($file) {
    while (!feof($file)) {
        $line = fgets($file);
        if ($line !== false) {
            echo $line;
        }
    }
    fclose($file);
}

Armadilhas comuns

  • Esquecer de verificar false. Se o caminho estiver errado ou as permissões negarem o acesso, fopen() retorna false e emite um aviso. Chamar fread() em false lança um TypeError no PHP 8+.
  • Não fechar o identificador. Descritores abertos são um recurso limitado; vazá-los em um processo de longa duração eventualmente esgota o limite do sistema operacional. Sempre use fclose(), preferencialmente em um bloco finally.
  • Modo errado. Usar 'w' quando pretendia 'r' apaga silenciosamente o arquivo. Use 'x' quando quiser especificamente que a criação falhe se o arquivo já existir.
  • Caminhos relativos. Eles são resolvidos em relação ao diretório de trabalho atual do script, que nem sempre é o que você espera. Prefira caminhos absolutos ou __DIR__ . '/file.txt'.

Quando não usar fopen()

Se você apenas precisa do arquivo inteiro como uma string, ou despejar uma string em um arquivo com uma única chamada, evite a dança de abrir/ler/fechar:

ObjetivoFunção mais simples
Ler um arquivo inteiro em uma stringfile_get_contents()
Escrever uma string em um arquivo com uma chamadafile_put_contents()
Ler um arquivo em um array de linhasfile()
Transmitir um arquivo diretamente para a saídareadfile()

Use fopen() quando precisar de controle incremental e detalhado — lendo arquivos grandes em blocos, acrescentando a um log ou trabalhando com fluxos que não são arquivos, como php://stdin.

Conclusão

fopen() é a base do tratamento de arquivos de baixo nível em PHP: retorna um ponteiro de arquivo que você lê com fread() / fgets(), escreve com fwrite() e sempre libera com fclose(). Escolha o modo correto, verifique o valor de retorno e feche o identificador, e o restante das funções de tratamento de arquivos do PHP seguirá naturalmente.

Prática

Prática
O que a função 'fopen' do PHP faz de acordo com a URL mencionada?
O que a função 'fopen' do PHP faz de acordo com a URL mencionada?
Was this page helpful?