W3docs

is_readable()

La función is_readable() de PHP verifica si un archivo es legible y devuelve true si se puede leer o false en caso contrario.

La función is_readable() te indica si PHP puede leer un archivo o directorio determinado antes de intentar abrirlo. Comprueba que la ruta existe y que el proceso actual tiene permiso de lectura sobre ella. Llamarla primero te permite manejar los errores con elegancia en lugar de generar una advertencia en tiempo de ejecución desde fopen() o file_get_contents().

Este capítulo cubre la sintaxis, el valor de retorno, un ejemplo ejecutable, los problemas más comunes (caché, permisos, condiciones de carrera) y cómo is_readable() se relaciona con las demás funciones del sistema de archivos de PHP.

Sintaxis

is_readable(string $filename): bool
ParteSignificado
$filenameRuta al archivo o directorio a verificar. Puede ser absoluta (/var/www/data.txt) o relativa al directorio de trabajo del script.
Retornatrue si la ruta existe y es legible por el usuario/proceso actual, false en caso contrario.

is_readable() también funciona con directorios: devuelve true cuando el directorio puede abrirse y listarse.

Ejemplo básico

php— editable, runs on the server

La función devuelve un booleano, por lo que encaja de forma natural dentro de una condición if: se bifurca según si el archivo puede leerse sin necesidad de abrirlo.

Un ejemplo autocontenido y ejecutable

El ejemplo anterior apunta a una ruta que puede no existir. Aquí hay una versión que puedes ejecutar en cualquier lugar: crea un archivo, lo verifica y luego verifica una ruta que no existe:

<?php

// Create a temp file we know is readable.
$file = tempnam(sys_get_temp_dir(), 'demo');
file_put_contents($file, 'hello');

var_dump(is_readable($file));            // bool(true)
var_dump(is_readable('/no/such/file'));  // bool(false)

unlink($file); // clean up

La primera llamada devuelve true porque el archivo existe y lo acabamos de crear con nuestros propios permisos; la segunda devuelve false porque la ruta no existe en absoluto.

Proteger una lectura de archivo

El uso típico en el mundo real es como guardia antes de leer, para que un archivo faltante o ilegible no emita una advertencia:

<?php

$path = 'config.json';

if (!is_readable($path)) {
    // Handle the problem your way: log, default, or throw.
    throw new RuntimeException("Cannot read config file: $path");
}

$config = json_decode(file_get_contents($path), true);

Problemas comunes

  • Los resultados se almacenan en caché. PHP almacena en caché la información de estado por solicitud. Si cambias los permisos de un archivo durante la misma ejecución del script, llama a clearstatcache() antes de volver a verificar, o podrías obtener una respuesta obsoleta.
  • true no es una garantía. Los permisos pueden cambiar entre la comprobación y la lectura real (una condición de carrera time-of-check to time-of-use). Para código crítico, intenta directamente la lectura y maneja el error, en lugar de depender únicamente de is_readable().
  • Devuelve false para rutas inexistentes — sin emitir advertencias. Así que is_readable() sirve también como verificación de "¿existe esto y puedo leerlo?". Para comprobar la existencia independientemente de los permisos, usa file_exists().
  • Los permisos se evalúan para el usuario del servidor web (frecuentemente www-data), no para tu usuario de shell, cuando el script se ejecuta bajo un servidor web.

Funciones relacionadas

  • is_writable() — el equivalente para permisos de escritura.
  • is_file() — verifica que la ruta es un archivo regular (no un directorio).
  • file_exists() — comprueba la existencia, ignorando el permiso de lectura.
  • fopen() y file_get_contents() — las funciones que normalmente se protegen con is_readable().

Conclusión

is_readable() es una forma ligera y sin efectos secundarios de verificar que una ruta existe y puede leerse antes de abrirla. Úsala como guardia para manejar errores con elegancia, recuerda que sus resultados se almacenan en caché dentro de una solicitud, y para código crítico de seguridad intenta la lectura y maneja los errores en lugar de confiar únicamente en la comprobación.

Práctica

Práctica
¿Qué hace la función is_readable() en PHP?
¿Qué hace la función is_readable() en PHP?
Was this page helpful?