DrTebi at yahoo dot com is wrong. is_readable() checks whether you can do file_get_contents() or similar calls, no more, no less. If the location given returns a 500 or 403 error, you can still read() that (you'll simply get the error page), but it's still read()able. Using is_readable to check the validity of a URL is simply the wrong function.
is_readable
(PHP 4, PHP 5)
is_readable — Indica si un fichero existe y es legible
Descripción
$filename
)Indica si un fichero existe y es legible.
Parámetros
-
filename -
La ruta del fichero.
Valores devueltos
Devuelve TRUE si el fichero o directorio especificado por
filename existe y es legible, FALSE si no.
Ejemplos
Ejemplo #1 Ejemplo de is_readable()
<?php
$nombre_fichero = 'prueba.txt';
if (is_readable($nombre_fichero)) {
echo 'El fichero es legible';
} else {
echo 'El fichero no es legible';
}
?>
Errores/Excepciones
En caso de fallo, se emite un E_WARNING.
Notas
Tenga en cuenta que PHP puede estar accediendo al fichero bajo el id de ususario por el que se está ejecutando el servidor web (a menudo 'nobody'). Las limitaciones del modo seguro no se toman en cuenta antes de PHP 5.1.5.
Nota: Los resultados de esta función son guardados en caché. Para más información ver clearstatcache().
Desde PHP 5.0.0, esta función también puede usarse con algunos URL wrappers. Consultar Protocolos y Envolturas soportados para deter4minar qué envolturas soportan la familia de funcionalidad de stat().
Nota:
La comprobación se realiza usando el UID/GID real en vez del efectivo.
Esta función podría devolver TRUE si se le proporcina un directorio. Use
is_dir() para distinguir entre ficheros y directorios.
Ver también
- is_writable() - Indica si un archivo existe y es escribible
- file_exists() - Comprueba si existe un fichero o directorio
- fgets() - Obtiene una línea desde el puntero a un fichero
Note that is_readable() will return false for streams, eg, php://stdin.
Be careful when using is_readable on symbolic links.
is_readable will return true if the file the symbolic link is pointing to is readable.
The problem is that if the server does NOT allow to follow symbolic links, is_readable will still return true, but e.g. redirecting to the sybolic link will not work. For Apache, make sure that at the server, virtual host configuration level, or inside a directory container you have set
Options +FollowSymLinks
As an example, let's say you have at the document root directory:
index.php -- the script using is_readable
my_linked_page.html -- a regular HTML page
my_link -- a link pointing to my_linked_page.html
Now in index.php:
<?php
if (is_readable('my_link')) {
header('Location: /my_link');
}
?>
If FollowSymLinks is forbidden, this will not work, if allowed, it will.
Sometimes in situations where file_exists fails (returns false even though the file does exist) stat will work.
Safe_mode restrictions ignored means:
cant read by read() so is_readable() = false.
even if safe_mode_include_dir is set and include does works, is_readable() is false to. :(
(php5)
