PHP:is_file()和file_exists()在同一个文件上返回不同的结果
问题描述:
我遇到了file_exists返回false并且is_file返回true的问题。PHP:is_file()和file_exists()在同一个文件上返回不同的结果
echo(getmygid()." = gid\n"); //501
echo(getmyuid()." = uid\n"); //501
echo(posix_getgid()." = pgid\n"); //501
echo(posix_getuid()." = puid\n"); //501
var_dump(file_exists("/home/www/public_html/")); //bool(true)
var_dump(file_exists("/home/www/public_html/index.html")); //bool(false)
var_dump(is_file("/home/www/public_html/index.html")); //bool(true)
var_dump(stat("/home/www/public_html/index.php"));
输出是:
501 = gid
501 = uid
501 = pgid
501 = puid
bool(true)
bool(false)
bool(true)
array(26) {
[0]=>
int(51712)
[1]=>
int(58055)
[2]=>
int(33197)
[3]=>
int(1)
[4]=>
int(501)
[5]=>
int(501)
[6]=>
int(0)
[7]=>
int(473)
[8]=>
int(1323573973)
[9]=>
int(1323573973)
[10]=>
int(1323574039)
[11]=>
int(4096)
[12]=>
int(8)
["dev"]=>
int(51712)
["ino"]=>
int(58055)
["mode"]=>
int(33197)
["nlink"]=>
int(1)
["uid"]=>
int(501)
["gid"]=>
int(501)
["rdev"]=>
int(0)
["size"]=>
int(473)
["atime"]=>
int(1323573973)
["mtime"]=>
int(1323573973)
["ctime"]=>
int(1323574039)
["blksize"]=>
int(4096)
["blocks"]=>
int(8)
}
我想我已经做错了什么配置,但还没有完全想通了它是什么。
更令人兴奋的是,尽管file_exists不起作用fread(fopen('/home/www/public_html/index.html','r'), filesize('/home/www/public_html/index.html'))
的确会返回文件的内容。
答
奇怪,这里有几个选项手动检查:
Note: The results of this function are cached. See clearstatcache() for more details.
或者这也许:
Warning
该函数返回FALSE的文件无法访问因安全模式限制。但是,如果这些文件位于safe_mode_include_dir中,它们仍然可以包含在内。
这些是我能想到的唯一可能影响它的事情。不知道你是否尝试过,但值得一试。
UPDATE
如何对文件的标志吗?从shell(如果有shell访问权限),你可以做一个ls -alh /home/www/public_html | grep index.html
并确保一个标志没有被设置为奇怪吗?
更新2
的问题是,目录的权限分别使业主无法查看目录的内容。这是在意见
答
参见file_exists()
警告:对于无法访问的文件
该函数返回
FALSE
由于安全模式的限制。但是,如果这些文件位于safe_mode_include_dir
中,则仍然可以包含这些文件。
is_file()
函数似乎没有这个限制。
进一步解释你已经发布了错误的文件的统计资料,你能改正这一点? – ajreal
所有这些目录(home,www,public_html)都为此脚本启用了读取权限?他们都是目录,而不是符号链接? –
是的。我的错。只是修正了那个。这是空的。和一个655模式。 – teotwawki