Introducción: ¿por qué PHP sabe trabajar con archivos?
Cualquier proyecto web, tarde o temprano, se enfrenta a la necesidad de guardar datos en el servidor. Ya sea la carga del avatar de un usuario, la creación de registros de errores o la generación de informes, todo esto requiere la capacidad de gestionar archivos y carpetas. PHP proporciona un potente conjunto de funciones para trabajar con el sistema de archivos, y dominarlas no es tan difícil como parece.
En este artículo, analizaremos las operaciones básicas: creación, lectura, escritura, eliminación de archivos y directorios, así como la verificación de permisos de acceso. Todos los ejemplos están escritos en PHP puro y listos para usar en sus proyectos.
1. Fundamentos: apertura, lectura y escritura de archivos
Antes de hacer algo con un archivo, es necesario abrirlo. Para esto, en PHP se utiliza la función fopen(). Esta devuelve un recurso (puntero al archivo) con el que luego se puede trabajar.
Modos de apertura de archivos
El segundo parámetro de fopen() es el modo de acceso. Estos son los más populares:
'r'— solo lectura, puntero al inicio del archivo.'w'— escritura (crea el archivo o lo vacía si existe).'a'— añadir al final del archivo (lo crea si no existe).'x'— creación y escritura; si el archivo ya existe, da error.
Ejemplo: escribir texto en un archivo
<?php$filename = 'test.txt';$file = fopen($filename, 'w') or die('No se pudo abrir el archivo');$text = "¡Hola, mundo!";fwrite($file, $text);fclose($file);echo 'Archivo escrito exitosamente';?>Después de escribir, siempre cierre el archivo con la función fclose() — esto libera recursos del sistema.
Lectura de un archivo línea por línea
<?php$file = fopen('test.txt', 'r');while (!feof($file)) { $line = fgets($file); echo $line . '<br>';}fclose($file);?>La función feof() verifica si se ha llegado al final del archivo. fgets() lee una línea.
Alternativas más simples
Para operaciones rápidas, PHP ofrece funciones envolventes:
file_get_contents($filename)— lee todo el archivo en una cadena.file_put_contents($filename, $data)— escribe una cadena en un archivo (lo crea o sobrescribe).
<?php// Lectura$content = file_get_contents('test.txt');echo $content;
// Escriturafile_put_contents('new.txt', 'Escritura simple');?>2. Gestión de directorios: creación, eliminación, navegación
Trabajar con carpetas en PHP es casi tan simple como con archivos. Las funciones principales son mkdir(), rmdir() y scandir().
Creación de una carpeta
<?php$dir = 'uploads';if (!is_dir($dir)) { mkdir($dir, 0777, true); echo 'Carpeta creada';} else { echo 'La carpeta ya existe';}?>El parámetro 0777 son los permisos de acceso (máscara). El tercer argumento true permite crear directorios anidados de forma recursiva (por ejemplo, images/2024/).
Eliminación de una carpeta
La función rmdir() solo elimina un directorio vacío. Si contiene archivos, primero hay que limpiarlo:
<?phpfunction removeDir($dir) { if (!is_dir($dir)) return; $items = scandir($dir); foreach ($items as $item) { if ($item == '.' || $item == '..') continue; $path = $dir . '/' . $item; if (is_dir($path)) { removeDir($path); } else { unlink($path); } } rmdir($dir);}removeDir('temp');echo 'Carpeta eliminada';?>Obtener la lista de archivos en una carpeta
<?php$files = scandir('uploads');foreach ($files as $file) { if ($file != '.' && $file != '..') { echo $file . '<br>'; }}?>