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 comoTRUE, a função irá procurar o arquivo no caminho de inclusão.$context: (opcional) Um recurso de contexto válido criado comstream_context_create().$offset: (opcional) Especifica onde começar a leitura no arquivo. Se$offsetfor 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); // WorldUm 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 remotashttp/https/ftppor 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_limitdo PHP. Faça stream de arquivos grandes comfopen()efread()ou leia linha a linha comfgets(). - Sem detalhes de erro HTTP: em um
404ou500remoto, a chamada retornafalse(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_fopendeve estar ativado: URLs remotas falham silenciosamente se esta diretiva dophp.iniestiver desabilitada, o que é comum em servidores com segurança reforçada.- Arquivo vazio vs. falha: um arquivo vazio retorna
"", nãofalse— 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.