El sistema de ficheros de PHP permite leer, escribir y gestionar archivos y directorios desde una aplicación.
PHP tiene muchas formas de manejar archivos (como las clásicas fopen, fwrite, fclose), pero para la mayoría de las tareas comunes, existen funciones “atajo” que hacen todo el trabajo sucio en una sola línea. Son más limpias, modernas y fáciles de leer.
Leer archivos: file_get_contents
Esta es la función estrella para leer. Abre el archivo, lee todo el contenido, lo guarda en una variable de texto (string) y cierra el archivo automáticamente.
- Uso ideal: Leer archivos de configuración, templates HTML, o archivos JSON pequeños/medianos.
- Cuidado: Carga todo el archivo en la memoria RAM. No la uses para leer archivos de 500MB o gigabytes.
$archivo = 'nota.txt';
if (file_exists($archivo)) {
// Lee todo el contenido y lo guarda en la variable
$contenido = file_get_contents($archivo);
echo "El contenido es: " . $contenido;
} else {
echo "El archivo no existe.";
}file_get_contents() también admite URLs si allow_url_fopen está activo. Para consumir servicios HTTP reales suele ser preferible usar un cliente que permita configurar tiempos de espera, cabeceras y errores.
Escribir archivos: file_put_contents
Es el opuesto exacto. Toma un string y lo guarda en un archivo. Si el archivo no existe, intenta crearlo.
Por defecto, esta función sobrescribe el archivo (borra lo anterior). Si quieres añadir contenido al final (como en un log), necesitas usar “flags” (banderas).
$archivo = 'log_errores.txt';
$mensaje = "Error detectado a las " . date('H:i') . "\n";
// 1. Sobrescribir (Cuidado: borra lo anterior)
file_put_contents($archivo, $mensaje);
// 2. Añadir al final (Modo Append) - RECOMENDADO para logs
// LOCK_EX evita que dos usuarios escriban a la vez y corrompan el archivo
file_put_contents($archivo, $mensaje, FILE_APPEND | LOCK_EX);Otras funciones esenciales
Estas funciones suelen devolver false y emitir un aviso cuando fallan. Comprobar la ruta reduce errores previsibles, pero también debes verificar el valor devuelto porque el archivo puede cambiar entre la comprobación y la operación.
| Función | Descripción | Ejemplo |
|---|---|---|
file_exists($ruta) | Verifica si el archivo o carpeta existe. | if (file_exists('img.jpg')) |
is_writable($ruta) | Comprueba si tienes permisos para escribir. | if (is_writable('logs/')) |
unlink($ruta) | Borra un archivo del sistema. | unlink('temp.txt'); |
mkdir($ruta) | Crea una carpeta (directorio). | mkdir('descargas'); |
Ejemplo integrado: sistema de logs simple
Vamos a combinar lo aprendido. Un script que guarda una visita y muestra el historial.
$archivoLog = 'visitas.txt';
// 1. Registramos la nueva visita (Escribir)
$nuevaVisita = "Visita desde IP 127.0.0.1 el " . date('d/m/Y H:i:s') . "\n";
file_put_contents($archivoLog, $nuevaVisita, FILE_APPEND | LOCK_EX);
// 2. Mostramos el historial (Leer)
try {
if (!file_exists($archivoLog)) {
throw new Exception("El archivo de logs aún no se ha creado.");
}
$historial = file_get_contents($archivoLog);
// nl2br convierte los saltos de línea (\n) en etiquetas <br> de HTML
echo "<h3>Historial de Visitas:</h3>";
echo nl2br($historial);
} catch (Exception $e) {
echo "Aviso: " . $e->getMessage();
}