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.
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.