Saltar al contenido principal

Ficheros en PHP

PHP ofrece múltiples funciones y métodos para trabajar con ficheros, permitiendo leer, escribir y manipular archivos locales de manera sencilla. Este acceso es fundamental para tareas como guardar logs, configurar la aplicación, procesar datos importados o generar informes.

PHP distingue entre ficheros de texto (legibles) y ficheros binarios (imágenes, audio, PDF, etc.) y proporciona herramientas para manejar ambos.

Operaciones básicas con ficheros

Crear y escribir en un fichero

La forma más sencilla de crear un fichero y escribir contenido es usando file_put_contents():

<?php
$contenido = "Hola mundo\nBienvenido a PHP!";
file_put_contents("archivo.txt", $contenido);
?>

Si el fichero no existe, PHP lo crea automáticamente. Si existe, se sobrescribe por defecto.

Para añadir contenido sin sobrescribir, se puede usar el tercer parámetro FILE_APPEND:

<?php
file_put_contents("archivo.txt", "Otra línea\n", FILE_APPEND);
?>

Leer un fichero completo

file_get_contents() permite leer el contenido completo de un fichero en memoria:

<?php
$texto = file_get_contents("archivo.txt");
echo $texto;
?>

Leer un fichero línea a línea

Cuando los ficheros son grandes, es mejor leer línea por línea usando fopen() y fgets():

<?php
$handle = fopen("archivo.txt", "r"); // "r" = modo lectura
if ($handle) {
while (($linea = fgets($handle)) !== false) {
echo $linea;
}
fclose($handle);
} else {
echo "No se pudo abrir el fichero.";
}
?>

Comprobar existencia y permisos

Antes de leer o escribir, conviene verificar que el fichero existe y que tiene permisos adecuados:

<?php
if (file_exists("archivo.txt") && is_readable("archivo.txt")) {
echo "El fichero existe y se puede leer.";
} else {
echo "Fichero no disponible o sin permisos de lectura.";
}
?>

Trabajar con ficheros binarios

Para ficheros binarios, como imágenes o PDFs, es recomendable usar fopen() con modos rb (lectura binaria) y wb (escritura binaria):

<?php
$origen = fopen("imagen.jpg", "rb");
$destino = fopen("copia_imagen.jpg", "wb");

while (!feof($origen)) {
$buffer = fread($origen, 1024); // leer 1024 bytes por iteración
fwrite($destino, $buffer);
}

fclose($origen);
fclose($destino);
?>

Eliminar y renombrar ficheros

PHP permite manipular la estructura de ficheros con funciones como unlink() y rename():

<?php
// Eliminar un fichero
unlink("archivo.txt");

// Renombrar un fichero
rename("copia_imagen.jpg", "imagen_backup.jpg");
?>

Directorios y rutas

PHP también permite trabajar con directorios y rutas:

<?php
// Crear directorio
mkdir("mi_directorio");

// Listar archivos de un directorio
$archivos = scandir("mi_directorio");
print_r($archivos);

// Comprobar si es directorio
if (is_dir("mi_directorio")) {
echo "Existe y es un directorio";
}
?>

Manejo de errores y buenas prácticas

  • Siempre cerrar ficheros abiertos con fclose() para liberar recursos.
  • Comprobar existencia y permisos antes de leer o escribir.
  • Evitar cargar ficheros grandes enteros en memoria; usar lectura por bloques o línea a línea.
  • Sanitizar rutas cuando provienen de entradas de usuario para evitar vulnerabilidades.
  • Utilizar funciones como file_get_contents() y file_put_contents() para operaciones simples y fopen()/fread()/fwrite() cuando se requiere mayor control.