Bienvenido a un tutorial sobre cómo leer archivos en PHP. Sí, así es, ¿qué tan difícil puede ser leer archivos en PHP? Se sorprenderá... No es tan sencillo como algunos pueden pensar.
Hay varias maneras de leer archivos en PHP:
Leer el archivo en una cadena
$contents = file_get_contents("FILE");
Leer el archivo en un array
$array = file("FILE");
Usar cURL para obtener un archivo de un servidor diferente.
$curl = curl_init("http://site.com/"); curl_setopt($curl, CURLOPT_RETTRANSFER, 1); $data = curl_exec($curl); curl_close($curl);
Abrir un flujo de archivos y leer línea por línea.
$stream = fopen("FILE", "r"); while(($line=fgets($handle))!==false) { echo $line; }Leer y salir directamente
readfile("FILE");
Cargar directamente un archivo en el script
include "FILE"; require "FILE";
Este es un resumen rápido de los métodos comunes, pero vamos a recorrer algunos ejemplos en esta guía
1) LEER EL ARCHIVO EN UNA CADENA
1-file-to-string.php
<?php // (A) LEER TODO EL CONTENIDO EN UNA CADENA $text = file_get_contents('README.txt'); echo $text; // (B) TAMBIÉN SE PUEDE OBTENER DE LA URL $text = file_get_contents('https://en.wikipedia.org/wiki/Aha_ha'); echo $text;
No hay mucha ciencia de cohetes involucrada aquí, sólo tenga en cuenta que file_get_contents() puede obtener el contenido de un archivo o de una URL. Aunque esto es sencillo, tenga cuidado de no leer archivos masivos con esto... Se encontrará con un error de "memoria agotada", y posiblemente causará algunos problemas en el servidor.
2) LEER EL ARCHIVO EN UN ARRAY
2-file-to-array.php
<? php // (A) ARCHIVO A ARRAY $array = archivo('README.txt'); print_r($array); // (B) OPCIÓN ADICIONAL - OMITIR LÍNEAS VACÍAS $array = file('README.txt', FILE_SKIP_EMPTY_LINES); print_r($array);
Este es otro sencillo. Pero en lugar de una cadena plana, file() leerá un array, siendo cada elemento una línea diferente. Tome nota de nuevo, no intente leer archivos grandes con esto.
3) CURL FETCH
3-curl.php
<?php $curl = curl_init("https://en.wikipedia.org/wiki/Aha_ha"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $data = curl_exec($curl); curl_close($curl); echo $data;
CURL son las siglas de "client URL", y en término llano "llamadas de servidor a servidor". Algunos de ustedes pueden estar pensando - ¿Qué diablos, no es esto una forma indirecta de hacer file_get_contents()? Pues no. CURL en realidad ofrece un montón de opciones y controles - Incluso puede obtener archivos de un servidor FTP.
4) LEER EL ARCHIVO LÍNEA POR LÍNEA
4 línea por línea.php
<? php // (A) ABRIR EL ARCHIVO $handle = fopen("README.txt", "r") o die("¡Error al leer el archivo!"); // (B) LEER LÍNEA POR LÍNEA while (($line = fgets($handle)) !== false) { // Para gestionar mejor la memoria, también se puede especificar cuántos bytes se van a leer de una vez // while (($line = fgets($handle, 4096)) !== false) { echo $línea; } // (C) CERRAR EL ARCHIVO fclose($handle);
Los 3 métodos anteriores se encuentran con un problema de memoria cuando se trata de archivos grandes. Así que para lidiar con ese problema, podemos usar fgets() y leer línea por línea en su lugar.
5) FILE STREAM
5-file-stream.php
<? php // (A) INICIAR EL BUFFER DE SALIDA ob_start(); // (B) CABECERAS HTTP PARA FORZAR LA DESCARGA header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="README.txt"'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: '.filesize('README.txt')); // (C) SALIDA DE TODAS LAS CABECERAS Y PARADA DEL BUFFERING ob_end_flush(); // (D) LEER Y DAR SALIDA AL ARCHIVO DIRECTAMENTE readfile('README.txt'); exit();
Este siguiente método es un poco diferente al resto. En lugar de leer un archivo en cadenas y arrays, lo emite directamente. Muy útil cuando se trata de forzar una descarga o transferir archivos enormes.
6) INCLUDE y REQUIRE
6-include-require.php
<!DOCTYPE HTML> <html> <body> <?php require "README.txt"; ?> </body> </html>