Exemplos de uso do file_get_contents no PHP

O file_get_contents é uma função bastante utilizada no PHP. Ela tem como finalidade ler todo o conteúdo de um arquivo para uma string, além de ter a capacidade de fazer outras coisas.

Vejamos alguns exemplos práticos de como utilizar essa função.

Lendo arquivos com file_get_contents

O file_get_contents tem como finalidade ler o conteúdo de um arquivo e retornar em uma string.

Na sua forma mais simples de uso, basta apenas passar como primeiro argumento o caminho do arquivo (seja absoluto ou relativo). Assim, o valor de file_get_contents poderá armazenado numa variável.

Exemplo:

// script.php

$caminho = DIR . '/index.html'; $conteudo = file_get_contents($caminho); echo $conteudo;

Se o arquivo tiver na mesma pasta onde o script.php é executado, não é necessário usar o caminho absoluto (caminho completo, que criamos ao concatenar o nome do arquivo com __DIR__ no exemplo anterior). Basta apenas passar o nome relativo do arquivo.

Exemplo:

// script.php

$caminho = 'index.html'; // ou $caminho = './index.html';

$conteudo = file_get_contents($caminho); echo $conteudo;


Executando requisições HTTP com file_get_contents

Com o file_get_contents também é possível fazer chamadas HTTP. Isso mesmo! Através dessa função podemos abrir o conteúdo remoto através de uma url.

Para você fazer requisições HTTP, é necessário habilitar a opção allow_url_fopen no php.ini.

Para fazer requisições GET simples, basta apenas passar a url que você deseja obter o conteúdo e o mesmo será retornado.

Exemplo:

echo file_get_contents('http://exemplo.com');
// ou 
echo file_get_contents('https://exemplo.com');

Requisições com método POST

É possível também enviar um POST no file_get_contents ao fazer uma requisição HTTP. Para isso, é preciso informar um context como terceiro argumento da função.

Nota: Na documentação do file_get_contents podemos ver a lista de parâmetros aceitos pela função.

Para criar um context, usamos a função stream_context_create. Vamos usar especificamente o contexto de http.

Exemplo mínimo:

$context = stream_context_create([
    'http' => [
        'method' => 'POST'
    ]
]);

$resultado = file_get_contents('https://httpbin.org/post', false, $context); var_dump($resultado);

Enviando cabeçalho e corpo em uma requisição

Além disso, podemos enviar cabeçalhos e o corpo na requisição. As opções de contexto para fazer isso são, respectivamente, header e content. Em header, podemos usar um array com a lista de cabeçalhos que serão enviados. Em content é necessário informar uma string.

Enviando JSON

Vejamos um exemplo mínimo de como enviar uma requisição cujo corpo da mesma seja em formato JSON. Podemos usar a função json_encodepara serializar os dados e informá-los em content. Da mesma forma, na opção header, temos que informar o content-type application/json.

Exemplo:

$context = stream_context_create([
    'http' => [
        'method' => 'POST',
        'header' => [
            'Content-Type: application/json'
        ],
        'content' => json_encode([
            'nome' => 'Wallace'
        ])
    ]
]);

$resultado = file_get_contents('https://httpbin.org/post', false, $context);

var_dump($resultado);

Enviando um formulário

Você também consegue enviar os dados de forma semelhante a um formulário HTML. Basta informamos em header o Content-Type application/www-form-urlencoded. Em seguida, também precisamos informar o content, usando a função http_build_query.

Exemplo:

$context = stream_context_create([
    'http' => [
        'method' => 'POST',
        'header' => [
            'Content-Type: application/x-www-form-urlencoded'
        ],
        'content' => http_build_query([
            'nome' => 'Wallace'
        ])
    ]
]);

$resultado = file_get_contents('https://httpbin.org/post', false, $context);

var_dump($resultado);

Nota: a função http_build_query transforma um array em uma string contendo um formato que geralmente é utilizado em query strings ou corpo de formulários.

Outras finalidades de file_get_contents

Além do citado, a função file_get_contents pode fazer outras coisas, pois a mesma suporta vários protocolos e wrappers.