Content-Type: application/x-php Abrir un archivo en PHP: fopen, modos y lectura segura | Línea de Código

PHP

Abrir un archivo en PHP: fopen, modos y lectura segura

Elige entre lectura completa, lectura por lineas, escritura o append sin perder datos por usar un modo equivocado.

Tipo: Guía práctica Lectura: 3 min Actualizado: 2026-06-03
Flujo de lectura y escritura de archivos en PHP con fopen, permisos y cierre seguro.

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

Herramienta

Selector de modo para archivos PHP

Elige la operacion y prepara la funcion, el modo y la comprobacion minima antes de tocar un archivo real.

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

  1. Construye la ruta desde una carpeta conocida, no desde el directorio actual implícito.
  2. Confirma permisos de lectura o escritura con is_readable o is_writable cuando aplique.
  3. Comprueba siempre si fopen, file_get_contents o fwrite devuelven false.
  4. Escapa el contenido si lo vas a mostrar en una página HTML.
  5. Cierra el recurso con fclose si abriste el archivo manualmente.
  6. 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.

Marcos Vidal

Autora de la guia

Marcos Vidal

Editor de guías de programación práctica

Prepara ejemplos y explicaciones de PHP, Java y JavaScript para que cada snippet se pueda probar, adaptar y mantener con menos dudas.

Credenciales: Experiencia editorial en tutoriales técnicos, revisión de snippets y documentación para estudiantes de programación.

Experiencia: Trabaja con ejemplos mínimos, pruebas manuales y listas de comprobación para reducir errores de integración.

Actualizado: 2026-06-03 Politica editorial Correcciones

Por que confiar

Contrastamos fuentes oficiales, actualizamos piezas clave y priorizamos estructura, contexto y enlazado interno por encima del relleno.

Compartir

Guarda o comparte esta guia con el enlace limpio.