(PHP 4, PHP 5)
is_readable — 判断给定文件名是否可读
$filename
)判断给定文件名是否存在并且可读。
filename
文件的路径。
如果由 filename
指定的文件或目录存在并且可读则返回 TRUE
,否则返回 FALSE
。
Example #1 is_readable() 例子
<?php
$filename = 'test.txt';
if (is_readable($filename)) {
echo 'The file is readable';
} else {
echo 'The file is not readable';
}
?>
失败时抛出E_WARNING
警告。
记住 PHP 也许只能以运行 webserver 的用户名(通常为 'nobody')来访问文件。不计入安全模式的限制。 Safe mode limitations are not taken into account before PHP 5.1.5.
Note: 此函数的结果会被缓存。参见 clearstatcache() 以获得更多细节。
自 PHP 5.0.0 起, 此函数也用于某些 URL 包装器。请参见 支持的协议和封装协议以获得支持 stat() 系列函数功能的包装器列表。
Note:
The check is done using the real UID/GID instead of the effective one.
对于目录这个函数可能会返回 TRUE
。请使用 is_dir() 来区分文件和目录。
pgl at yoyo dot org (2009-07-31 07:13:28)
Note that is_readable() will return false for streams, eg, php://stdin.
jascha át gmx dót com (2006-11-07 06:58:48)
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)
jo at durchholz dot org (2006-01-30 09:15:54)
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.
DrTebi at yahoo dot com (2005-10-13 09:22:56)
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.
(2005-07-26 19:08:16)
Sometimes in situations where file_exists fails (returns false even though the file does exist) stat will work.