W3docs

Entendendo file_get_contents em PHP

file_get_contents é uma função PHP usada para ler o conteúdo de um arquivo em uma string. Útil para arquivos de texto e URLs remotas.

file_get_contents é uma função em PHP usada para ler o conteúdo de um arquivo em uma string. Esta função é particularmente útil ao trabalhar com arquivos de texto e pode ser usada para recuperar o conteúdo de um arquivo de um servidor remoto ou de um sistema de arquivos local.

Sintaxe

A sintaxe da função file_get_contents é a seguinte:

Sintaxe da função PHP file_get_contents

file_get_contents(
    string $filename,
    bool $use_include_path = false,
    ?resource $context = null,
    int $offset = 0,
    ?int $maxlen = null
): string|false
  • $filename: O caminho para o arquivo ou a URL a ser lida.
  • $use_include_path: (opcional) Se definido como TRUE, a função irá procurar o arquivo no caminho de inclusão.
  • $context: (opcional) Um recurso de contexto válido criado com stream_context_create().
  • $offset: (opcional) Especifica onde começar a leitura no arquivo. Se $offset for negativo, a função começará a ler a partir do final do arquivo.
  • $maxlen: (opcional) Especifica o número máximo de bytes a serem lidos.

Como file_get_contents Funciona

A função file_get_contents() recebe um caminho de arquivo ou URL como primeiro argumento e retorna o conteúdo completo do arquivo como uma única string. Como carrega tudo na memória de uma vez, é a forma mais simples de ler um arquivo inteiro — mas também a ferramenta errada para arquivos maiores do que a memória disponível.

O valor de retorno é o conteúdo do arquivo em caso de sucesso, ou false em caso de falha. Como um arquivo vazio retorna legitimamente uma string vazia "" (que é falsy), sempre compare com o operador estrito !== false em vez de uma verificação de verdade simples.

Lendo um Arquivo Local

O uso mais comum é ler um pequeno arquivo local, como um arquivo de configuração ou template:

$content = file_get_contents('config.txt');

if ($content !== false) {
    echo $content;
} else {
    echo "Error: could not read the file.";
}

file_get_contents() retorna false em caso de falha — por exemplo, quando o arquivo não existe ou o processo não tem permissão de leitura — e também emite um aviso PHP. Para suprimir o aviso e tratar o erro você mesmo, prefixe a chamada com o operador de controle de erros @:

$content = @file_get_contents('missing.txt');

if ($content === false) {
    echo "File is unavailable.";
}

Lendo Parte de um Arquivo Com offset e maxlen

Não é necessário ler o arquivo inteiro. Os parâmetros $offset e $maxlen permitem ler uma fatia, o que é útil para inspecionar cabeçalhos ou arquivos muito grandes:

// File contains: "Hello, World!"
// Read 5 bytes starting at offset 7
echo file_get_contents('greeting.txt', false, null, 7, 5); // World

Um padrão comum no mundo real é ler apenas os primeiros bytes para detectar o tipo de um arquivo, sem carregar o arquivo inteiro na memória.

Buscando uma URL Remota

Quando a configuração allow_url_fopen do PHP está habilitada, você pode passar uma URL http:// ou https:// e file_get_contents() irá baixar o corpo da resposta:

$html = file_get_contents('https://example.com');

if ($html !== false) {
    echo substr($html, 0, 100); // first 100 characters
}

Isso é conveniente para scripts rápidos, mas para chamadas HTTP em produção — onde você precisa de timeouts, cabeçalhos personalizados, corpos POST ou códigos de erro detalhados — a extensão cURL é a escolha mais robusta.

Consumindo uma API JSON

Uma tarefa frequente é buscar JSON de uma API e decodificá-lo em um array PHP. Combine file_get_contents() com json_decode():

$json = file_get_contents('https://api.example.com/data.json');
$data = json_decode($json, true); // true => associative array

echo $data['name'];

Enviando Cabeçalhos Com um Contexto de Stream

Para enviar cabeçalhos HTTP personalizados, definir um timeout ou fazer uma requisição POST, passe um contexto de stream criado com stream_context_create() como terceiro argumento:

$context = stream_context_create([
    'http' => [
        'method'  => 'POST',
        'header'  => "Content-Type: application/json\r\n",
        'content' => json_encode(['key' => 'value']),
        'timeout' => 5,
    ],
]);

$response = file_get_contents('https://api.example.com/submit', false, $context);

Benefícios

  • Simples: recupera um arquivo inteiro em uma única linha, sem necessidade de abrir, ler e fechar um handle manualmente.
  • Rápido para arquivos pequenos: eficiente para ler arquivos de configuração, template ou dados de pequeno a médio porte.
  • Versátil: funciona em caminhos locais e, com allow_url_fopen, em URLs remotas http/https/ftp por meio da mesma API.

Limitações e Armadilhas

  • Uso de memória: o arquivo inteiro é carregado na memória, então ler um arquivo de vários gigabytes pode exceder o memory_limit do PHP. Faça stream de arquivos grandes com fopen() e fread() ou leia linha a linha com fgets().
  • Sem detalhes de erro HTTP: em um 404 ou 500 remoto, a chamada retorna false (ou conteúdo parcial) sem um código de status acessível. Use a extensão cURL quando precisar inspecionar o status da resposta.
  • allow_url_fopen deve estar ativado: URLs remotas falham silenciosamente se esta diretiva do php.ini estiver desabilitada, o que é comum em servidores com segurança reforçada.
  • Arquivo vazio vs. falha: um arquivo vazio retorna "", não false — mais um motivo para testar com !== false.

Funções Relacionadas

  • file_put_contents() — o equivalente de escrita; salva uma string em um arquivo em uma única chamada.
  • file() — lê um arquivo em um array de linhas em vez de uma única string.
  • readfile() — lê um arquivo e o grava diretamente no buffer de saída (bom para servir downloads).
  • fopen() — abre um handle para leitura e escrita incremental via stream.

Conclusão

file_get_contents() é uma função simples e versátil para ler o conteúdo de arquivos locais e URLs remotas em uma string. Sua conveniência a torna a escolha preferida para arquivos pequenos, dados de configuração e chamadas rápidas de API. Para arquivos muito grandes, prefira streaming com fopen()/fread(); para requisições HTTP em produção, prefira cURL. Usada com uma verificação estrita !== false no valor de retorno, ela continua sendo uma das funções de I/O mais práticas em PHP.

Prática

Prática
O que descreve a função 'file_get_contents()' em PHP?
O que descreve a função 'file_get_contents()' em PHP?
Was this page helpful?