file_get_contents

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

file_get_contentsLee todo un fichero en una cadena

Descripción

file_get_contents(
    string $filename,
    bool $use_include_path = false,
    ?resource $context = null,
    int $offset = 0,
    ?int $length = null
): string|false

Similar a la función file(), excepto que file_get_contents() devuelve el fichero filename en una cadena, comenzando desde la posición offset y hasta length bytes. En caso de error, file_get_contents() devuelve false.

file_get_contents() es el método recomendado para leer el contenido de un fichero en una string. Utilizará un buffer en memoria si este mecanismo es soportado por el sistema, con el fin de mejorar el rendimiento.

Nota:

Si se abre una URI con caracteres especiales, como espacios, es necesario codificar esta URI con la función urlencode().

Parámetros

filename

Nombre del fichero a leer.

use_include_path

Nota:

La constante FILE_USE_INCLUDE_PATH puede ser utilizada para activar la búsqueda en el ruta de inclusión. Esto no es posible si strict typing está activado, ya que FILE_USE_INCLUDE_PATH es un int. Utilice true en su lugar.

context

Un recurso de contexto válido, creado con la función stream_context_create(). Si no es necesario utilizar un contexto específico, este parámetro puede ser omitido asignándole el valor null.

offset

La posición desde la cual se comienza a leer en el flujo original. Una posición negativa cuenta desde el final del flujo.

El desplazamiento en el fichero (offset) no es soportado en ficheros remotos. Si se intenta desplazarse en un fichero que no es local puede funcionar en pequeños desplazamientos, pero el comportamiento puede no ser el esperado ya que el proceso utiliza el flujo del buffer.

length

El tamaño máximo de datos a leer. El comportamiento por defecto es leer hasta el final del fichero. Este parámetro se aplica al flujo procesado por los filtros.

Valores devueltos

Devuelve los datos leídos o false si ocurre un error.

Advertencia

Esta función puede retornar false, pero también puede retornar un valor equivalente a false. Por favor, lea la sección sobre los booleanos para más información. Utilice el operador === para probar el valor de retorno exacto de esta función.

Errores/Excepciones

Genera una advertencia de tipo E_WARNING si, filename no puede ser encontrado, si el parámetro length es menor que cero, o si el desplazamiento a la posición offset especificado en el flujo falla.

Cuando file_get_contents() es llamado sobre un directorio, se genera un error de nivel E_WARNING en Windows, y a partir de PHP 7.4 en otros sistemas operativos también.

Historial de cambios

Versión Descripción
8.0.0 length ahora es nullable.
7.1.0 Se añade soporte para posiciones offset negativas.

Ejemplos

Ejemplo #1 Lee y muestra el código HTML de un sitio web

<?php
$homepage
= file_get_contents('http://www.example.com/');
echo
$homepage;
?>

Ejemplo #2 Busca un fichero en el include_path

<?php
// Si el tipado estricto está activado c.à.d. declare(strict_types=1);
$file = file_get_contents('./people.txt', true);
// De lo contrario
$file = file_get_contents('./people.txt', FILE_USE_INCLUDE_PATH);
?>

Ejemplo #3 Lee una sección de un fichero

<?php
// Lee 14 caracteres a partir del 21º carácter
$section = file_get_contents('./people.txt', FALSE, NULL, 20, 14);
var_dump($section);
?>

Resultado del ejemplo anterior es similar a :

string(14) "lle Bjori Ro"

Ejemplo #4 Uso de contextos de flujo

<?php
// Creación de un flujo
$opts = [
'http'=> [
'method'=>"GET",
'header'=>"Accept-language: en\r\n" .
"Cookie: foo=bar\r\n",
]
];

$context = stream_context_create($opts);

// Acceso a un fichero HTTP con los encabezados HTTP indicados arriba
$file = file_get_contents('http://www.example.com/', false, $context);
?>

Notas

Nota: Esta función maneja strings binarios.

Sugerencia

Puede utilizar una URL como nombre de archivo con esta función, si el gestor fopen ha sido activado. Véase fopen() para más detalles sobre cómo especificar el nombre del archivo. Consulte Protocolos y Envolturas soportados para más información sobre las capacidades de los diferentes gestores, las notas sobre su uso, así como la información sobre las variables predefinidas que proporcionan.

Advertencia

Cuando SSL es utilizado, el servidor IIS de Microsoft violará el protocolo al cerrar la conexión sin enviar un indicador close_notify. PHP lo reportará como "SSL: Fatal Protocol Error" cuando se llegue al final de los datos. Para evitar esto, el nivel de la directiva error_reporting debe ser bajado para no incluir los avisos. PHP puede detectar automáticamente los servidores IIS defectuosos al abrir el flujo utilizando https:// y suprimirá el aviso. Al utilizar fsockopen() para crear un socket ssl://, es responsabilidad del desarrollador detectar y suprimir el aviso.

Ver también

add a note

User Contributed Notes 3 notes

up
39
Bart Friederichs
13 years ago
file_get_contents can do a POST, create a context for that first:

<?php

$opts
= array('http' =>
array(
'method' => 'POST',
'header' => "Content-Type: text/xml\r\n".
"Authorization: Basic ".base64_encode("$https_user:$https_password")."\r\n",
'content' => $body,
'timeout' => 60
)
);

$context = stream_context_create($opts);
$url = 'https://'.$https_server;
$result = file_get_contents($url, false, $context, -1, 40000);

?>
up
4
brentcontact at daha dot us
1 year ago
To prevent mixed content most browsers/functions will use the protocol already used if you specify only // instead of http:// or https://. This is not the case with file_get_contents. You must specify the protocol.

This does not work:
<?php
$jsonData
= file_get_contents('//example.com/file.json');
print
$jsonData;
?>

Specifying only 'example.com/file.json' without the double slash does not work either.

When running on Apache 2.4 , using $_SERVER['REQUEST_SCHEME'] is a better way to be protocol agnostic.
<?php
$jsonData
= file_get_contents($_SERVER['REQUEST_SCHEME'].'://example.com/file.json');
print
$jsonData;
?>

If using another web server, you may have to get the protocol another way or hard code it.
up
3
KC
1 year ago
If doing a negative offset to grab the end of a file and the file is shorter than the offset, then file_get_contents( ) will return false.

If you want it to just return what is available when the file is shorter than the negative offset, you could try again.

For example...

$contents = file_get_contents( $log_file, false, null, -4096 ); // Get last 4KB

if ( false === $contents ) {
// Maybe error, or maybe file less than 4KB in size.

$contents = file_get_contents( $log_file, false, null );

if ( false === $contents ) {
// Handle real error.
}
}
To Top