Archivos
Antes de llamar a fopen decide qué operación necesitas
Abrir un archivo en PHP no es solo poner una ruta y un modo. Primero decide si vas a leer, escribir, añadir al final o procesar un archivo grande por partes. Esa decisión cambia la función adecuada, el modo de apertura y los controles previos.
La ruta también importa. En un servidor web el directorio actual puede no ser el que imaginas, por eso conviene construir rutas con __DIR__ o con una carpeta controlada del proyecto. Si el nombre llega desde un formulario, trátalo como dato no confiable.
Elige función y modo
Funciones y modos más usados
| Necesidad | Opción razonable | Punto crítico |
|---|---|---|
| Leer archivo pequeño completo | file_get_contents($ruta) | Comprueba false; carga todo en memoria |
| Leer por líneas | fopen($ruta, 'r') + fgets() | Cierra con fclose y controla EOF |
| Escribir desde cero | fopen($ruta, 'w') + fwrite() | w vacía el archivo si ya existe |
| Añadir al final | fopen($ruta, 'a') o FILE_APPEND | Usa bloqueo si puede haber varias escrituras |
| Leer y escribir | r+ o c+ según el caso | No lo uses hasta entender la posición del puntero |
fopen puede trabajar con streams, pero para una guía de aprendizaje conviene empezar por archivos locales y rutas controladas.
Ejemplo mínimo con ruta controlada
<?php
$ruta = __DIR__ . '/datos/ejemplo.txt';
if (!is_readable($ruta)) {
throw new RuntimeException('El archivo no se puede leer');
}
$handle = fopen($ruta, 'r');
if ($handle === false) {
throw new RuntimeException('No se pudo abrir el archivo');
}
while (($linea = fgets($handle)) !== false) {
echo htmlspecialchars($linea, ENT_QUOTES, 'UTF-8');
}
fclose($handle);
El ejemplo separa tres comprobaciones: la ruta existe y se puede leer, fopen devuelve un recurso válido y cada línea se escapa antes de imprimirse en HTML. Para escribir, cambia el modo con mucho cuidado: w sobrescribe, a añade y r no permite escritura.
Checklist antes de usar una ruta real
- Construye la ruta desde una carpeta conocida, no desde el directorio actual implícito.
- Confirma permisos de lectura o escritura con is_readable o is_writable cuando aplique.
- Comprueba siempre si fopen, file_get_contents o fwrite devuelven false.
- Escapa el contenido si lo vas a mostrar en una página HTML.
- Cierra el recurso con fclose si abriste el archivo manualmente.
- Usa bloqueo o colas si varios procesos pueden escribir a la vez.
Errores que suelen romper la página
- Usar una ruta enviada por GET como si fuera segura.
- Abrir con w un archivo que querías conservar.
- Leer archivos grandes con file_get_contents sin límite de memoria.
- Olvidar que PHP se ejecuta con el usuario del servidor, no con tu usuario local.
- Mostrar contenido de un archivo sin escapar y crear un XSS accidental.
Cuándo usar file_put_contents
file_put_contents es cómodo cuando solo quieres escribir una cadena en un archivo. Para un log sencillo puede bastar con FILE_APPEND y LOCK_EX. Para flujos con validación, escritura parcial o tratamiento de errores más fino, fopen, fwrite y fclose dan más control.
Si el archivo es parte de una operación importante, no ignores el número de bytes escritos. fwrite puede devolver false o escribir menos de lo esperado. Esa comprobación es más útil que repetir el intento sin saber qué falló.
Preguntas frecuentes
¿Qué modo uso para leer un archivo?
Usa r si el archivo ya existe y solo necesitas leerlo. Si quieres leerlo completo y es pequeño, file_get_contents puede ser suficiente.
¿Por qué fopen no crea mi carpeta?
fopen puede crear el archivo en algunos modos, pero no crea directorios intermedios. Crea y valida la carpeta antes.
¿file_get_contents es mejor que fopen?
No siempre. Es más simple para archivos pequeños completos; fopen es mejor para archivos grandes, lectura por líneas o control fino.
¿Puedo abrir una URL con fopen?
PHP admite wrappers si están habilitados, pero para aprender y para seguridad es mejor separar archivos locales de llamadas HTTP.
Fuentes consultadas
Fuentes y referencias
Consulta referencias útiles para ampliar o contrastar esta guía.
Siguiente lectura
Guias relacionadas para continuar
Si quieres seguir con el mismo tema, aqui tienes paginas cercanas que amplian la tecnica, comparan variantes o te llevan a la siguiente rutina.