PHP File Open: Guía para leer y escribir archivos en PHP
Aprende a abrir, leer, escribir y cerrar archivos en PHP usando fopen(), fread(), fwrite() y fclose() con ejemplos prácticos.
Leer y escribir archivos es una de las tareas más comunes en la programación del lado del servidor: guardas documentos subidos, generas registros, almacenas datos en caché y lees archivos de configuración. PHP te ofrece un conjunto pequeño y estable de funciones para esto, y todas comienzan con una sola llamada: fopen(). Este capítulo explica cómo abrir un archivo, leerlo, escribir en él, añadir contenido, cerrarlo y gestionar los errores que inevitablemente encontrarás en el camino.
Comprendiendo la función fopen()
La función fopen() abre un archivo (o una URL) y devuelve un manejador de archivo — un recurso que pasas a todas las demás funciones de archivo. Acepta dos argumentos obligatorios: la ruta al archivo y el modo que decide qué tienes permitido hacer con él y dónde comienza el puntero de archivo interno (el cursor que marca tu posición).
$handle = fopen("example.txt", "r");Si el archivo no puede abrirse, fopen() devuelve false y emite una advertencia, por lo que siempre debes comprobar el valor de retorno antes de usar el manejador.
Modos de archivo
El modo es el argumento más importante: controla si el archivo se lee, se sobreescribe o se añade contenido, y si se crea un archivo inexistente.
| Modo | Lectura | Escritura | El puntero comienza en | ¿Trunca? | ¿Crea si no existe? |
|---|---|---|---|---|---|
r | sí | no | inicio | no | no (falla) |
r+ | sí | sí | inicio | no | no (falla) |
w | no | sí | inicio | sí | sí |
w+ | sí | sí | inicio | sí | sí |
a | no | sí | final | no | sí |
a+ | sí | sí | final | no | sí |
x | no | sí | inicio | n/a | sí (falla si existe) |
x+ | sí | sí | inicio | n/a | sí (falla si existe) |
Algunas reglas que vale la pena recordar:
- Usa
rcuando el archivo ya debe existir y solo necesitas leerlo. wyw+borran el contenido del archivo en el momento en que se abre — nunca los uses cuando quieras conservar los datos existentes.aya+son la opción segura para registros: siempre escriben al final y nunca truncan.xyx+protegen contra la sobreescritura accidental de un archivo existente, lo que es útil para operaciones de "crear una sola vez".
Nota: En Windows, añade b al modo (p. ej., rb, wb, ab) para abrir el archivo en modo binario y evitar la traducción de saltos de línea que puede corromper archivos no textuales. En Linux y macOS el indicador b es inofensivo, por lo que añadirlo en todas partes mantiene tu código portable.
Lectura de archivos en PHP
Para leer un archivo, ábrelo en modo lectura (r) y usa fread(). fread() recibe el manejador de archivo y el número de bytes a leer; combinarlo con filesize() lee el archivo completo de una vez.
Aquí hay un ejemplo que lee el contenido completo de un archivo:
<?php
$file = fopen("example.txt", "r");
if ($file) {
$contents = fread($file, filesize("example.txt"));
fclose($file);
echo $contents;
}
?>Lectura de un archivo línea por línea
Para archivos grandes, leer todo en memoria es un desperdicio. Usa fgets() para leer una línea a la vez y feof() ("fin de archivo") para detenerte cuando llegues al final:
<?php
$file = fopen("example.txt", "r");
if ($file) {
while (!feof($file)) {
$line = fgets($file);
echo $line;
}
fclose($file);
}
?>La alternativa más corta: file_get_contents()
Para lecturas sencillas donde solo quieres el archivo completo como string, file_get_contents() realiza la apertura, lectura y cierre en una sola llamada:
<?php
$contents = file_get_contents("example.txt");
echo $contents;
?>Usa fopen() + fread()/fgets() cuando necesites un control detallado (transmisión, lecturas parciales, bloqueo); recurre a file_get_contents() cuando simplemente quieras el texto del archivo.
Escritura de archivos en PHP
Para escribir en un archivo, ábrelo en modo escritura (w) y usa fwrite(). fwrite() recibe el manejador de archivo y el string a escribir, y devuelve el número de bytes escritos (o false en caso de fallo). Recuerda que w trunca el archivo primero, por lo que siempre comienza desde un archivo vacío.
Aquí hay un ejemplo que escribe datos en un archivo:
<?php
$file = fopen("example.txt", "w");
if ($file) {
fwrite($file, "This is some data.");
fclose($file);
}
?>Al igual que con la lectura, existe un atajo de una sola llamada para escribir: file_put_contents() abre, escribe y cierra el archivo en una sola instrucción.
Añadir datos a archivos en PHP
Para añadir datos a un archivo en PHP, puedes usar la función fopen() en modo de adición (a) y la función fwrite(). Esto te permite agregar datos al final de un archivo, en lugar de sobreescribirlo.
Aquí hay un ejemplo que añade datos a un archivo:
<?php
$file = fopen("example.txt", "a");
if ($file) {
fwrite($file, "This is some additional data.");
fclose($file);
}
?>Cierre de archivos en PHP
Es importante cerrar un archivo después de haber terminado de trabajar con él, para liberar recursos del sistema y evitar la corrupción de datos. Esto se puede hacer usando la función fclose(), que toma como argumento el puntero de archivo devuelto por fopen().
Aquí hay un ejemplo que demuestra la forma correcta de cerrar un archivo en PHP:
<?php
$file = fopen("example.txt", "r");
if ($file) {
// Perform file operations here
fclose($file);
echo "File closed successfully.";
}
?>Manejo de errores en PHP
Es importante gestionar los errores correctamente cuando se trabaja con archivos en PHP. Por ejemplo, si intentas abrir un archivo que no existe, o si intentas escribir en un archivo que no tiene permisos de escritura, recibirás un error.
Para gestionar errores, puedes usar la instrucción if y la variable $file devuelta por fopen(). Si fopen() devuelve false, significa que ha ocurrido un error. En entornos de producción, puedes usar el operador de supresión de errores @ o configurar un manejador de errores personalizado para gestionar las advertencias de forma elegante sin romper el diseño de la página.
Aquí hay un ejemplo que demuestra el manejo de errores en PHP:
<?php
$file = fopen("example.txt", "r");
if ($file) {
$contents = fread($file, filesize("example.txt"));
fclose($file);
echo $contents;
} else {
echo "Error: Unable to open file.";
}
?>Resumen
fopen() es la base del manejo de archivos en PHP. El modo que elijas lo decide todo: r lee, w sobreescribe, a añade, y x crea un archivo solo si no existe todavía. Lee con fread()/fgets(), escribe con fwrite(), comprueba siempre si el manejador es válido, y ciérralo con fclose() cuando hayas terminado. Para lecturas y escrituras simples de una sola operación, prefiere file_get_contents() y file_put_contents().
Para profundizar más, consulta fopen(), fread() y fwrite(), así como los capítulos más amplios sobre PHP File Handling y PHP Filesystem.