file()
La función file() de PHP lee el contenido de un archivo y lo almacena en un array. Es la forma más rápida de obtener las líneas de un archivo en PHP.
¿Qué es la función file()?
La función file() lee un archivo completo en un array, donde cada elemento del array es una línea del archivo. Es la forma más rápida de obtener las líneas de un archivo en un array de PHP con una sola llamada — no necesitas abrir un manejador, recorrer con fgets(), ni cerrar nada después.
Usa file() cuando quieras procesar un archivo línea a línea: contar líneas, filtrar filas, leer una lista de valores o analizar un registro pequeño. Para obtener una cadena grande en lugar de un array, usa file_get_contents(); para escribir un archivo con una sola llamada, usa file_put_contents().
Sintaxis
file(string $filename, int $flags = 0, ?resource $context = null): array|false| Parámetro | Descripción |
|---|---|
$filename | Ruta al archivo a leer. Puede ser una ruta local o una URL (si allow_url_fopen está habilitado). |
$flags | Opcional. Uno o más indicadores combinados con el operador OR a nivel de bits (|). Consulta la tabla a continuación. |
$context | Opcional. Un recurso de contexto de flujo creado con stream_context_create(). |
Valor de retorno: un array de líneas, o false en caso de error (por ejemplo, si el archivo no existe). Por defecto, cada línea conserva el salto de línea al final (\n).
El parámetro flags
$flags te permite controlar cómo se leen las líneas. Combínalos con |:
| Indicador | Efecto |
|---|---|
FILE_IGNORE_NEW_LINES | Elimina el carácter de salto de línea al final de cada línea. |
FILE_SKIP_EMPTY_LINES | Omite las líneas vacías (más útil junto con FILE_IGNORE_NEW_LINES). |
FILE_USE_INCLUDE_PATH | Busca el archivo también en el include_path. |
<?php
// Lines without trailing "\n", and no blank lines.
$lines = file('myfile.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);Cómo usar la función file()
Un ejemplo completo que crea un archivo, lo lee con file() y recorre las líneas:
<?php
// Create a small file to read.
file_put_contents('myfile.txt', "First line\nSecond line\nThird line\n");
$lines = file('myfile.txt');
foreach ($lines as $lineNumber => $line) {
echo "Line #{$lineNumber}: " . trim($line) . "\n";
}Esto imprime:
Line #0: First line
Line #1: Second line
Line #2: Third lineLas claves del array son números de línea de base cero, y los valores son el contenido de cada línea. Usamos trim() aquí para eliminar el salto de línea al final que file() conserva por defecto — pasar FILE_IGNORE_NEW_LINES haría lo mismo en el momento de la lectura.
Contar líneas en un archivo
Como file() devuelve un array, count() te da el número de líneas directamente:
<?php
file_put_contents('myfile.txt', "alpha\nbeta\ngamma\n");
$lines = file('myfile.txt', FILE_IGNORE_NEW_LINES);
echo "The file has " . count($lines) . " lines.\n"; // The file has 3 lines.Manejo de errores
Cuando el archivo no se puede leer, file() devuelve false y emite una advertencia. Siempre verifica el resultado antes de recorrerlo:
<?php
$lines = @file('does-not-exist.txt');
if ($lines === false) {
echo "Could not read the file.\n";
} else {
echo "Read " . count($lines) . " lines.\n";
}El operador @ suprime la advertencia integrada para que puedas gestionar el error por tu cuenta.
Consideraciones importantes
- Todo el archivo en memoria.
file()carga todas las líneas en un array de una vez. Para archivos muy grandes, abre un manejador confopen()y lee línea a línea confgets(). - Los saltos de línea al final se conservan a menos que pases
FILE_IGNORE_NEW_LINES. Esto causa problemas en comparaciones exactas de cadenas, p. ej.,$lines[0] === 'value'falla cuando el elemento es en realidad"value\n". - Verifica la existencia primero si quieres evitar advertencias: combínalo con
file_exists()o suprime con@.
Conclusión
La función file() es la forma más sencilla de leer un archivo en un array de líneas en PHP. Usa los indicadores FILE_IGNORE_NEW_LINES y FILE_SKIP_EMPTY_LINES para obtener líneas limpias, protégete siempre frente a un valor de retorno false, y prefiere fgets() para archivos demasiado grandes para mantener en memoria.