我有一个 file_exists() 总是返回 false 的情况。 我最近的尝试是测试 $_SERVER["SCRIPT_FILENAME"] 是否返回 true,然后如果找不到它所找到的文件,则返回路径的值。
虽然与解决问题不一定相关的路径是:/Users/joe/Workspace/720/app/webroot/index.php
我显然已经验证了该文件是否存在,但我什至不确定它怎么可能不存在,因为 php 正在提供它。
我应该提到这是在运行 PHP 5.3.0 的 OS X Snow Leopard 上安装的。
任何想法都会很棒。
代码示例:
if (!file_exists($_SERVER["SCRIPT_FILENAME"]))
$errors[] = 'Cant find:'. $_SERVER["SCRIPT_FILENAME"];
我刚刚经历过这个问题,并且在过去的几个小时里一直被困在这个问题上。答案是您需要指定 ABSOULTE 路径才能使 file_exists() 正常工作。您不能使用相对路径,例如“dir1/images/image.jpg”或“../../images/image1.jpg”。您需要指定“/rootdir/subdir/dir1/images/myimage.jpg”。
无论如何,这对我有用。
这可能是文件权限问题。确保您正在测试的文件可由
_www
用户(即用于在 Mac OS X 上运行 apache {httpd} 的用户)访问。
也许您可以尝试测试 /tmp 上的文件,其权限位为 777。
希望有帮助。
file_exists()
对于由于安全模式限制而无法访问的文件,此函数返回 FALSE。但是,如果这些文件位于 safe_mode_include_dir 中,仍然可以包含它们。
这只是一个猜测,代码示例可能会让事情变得更清楚。
另一个原因
file_exists()
可能无法访问该文件(与安全模式无关):
注意:检查是使用真实的UID/GID,而不是有效的UID/GID。
这个脚本在我的 Linux 机器上运行良好(这几乎是您添加的示例):
<?php
if (file_exists($_SERVER["SCRIPT_FILENAME"])){
echo "Found File: ";
} else {
echo "No File: ";
}
echo $_SERVER["SCRIPT_FILENAME"];
?>
还要检查父目录及其所有父目录,以确保每个人都具有执行访问权限。
如果您在 Apache 下运行(而不是在命令行上),请记住它在 Snow Leopard 上的
_www
用户和 _www
组下运行。这就是需要访问权限的组。
这可能有帮助:
http://bugs.php.net/bug.php?id=48535
具体:
我已将 php.ini 中的 fastcgi.impersonate 设置为 1(例如 文档中推荐)。 如果我将其设置为 0,它就可以工作。
使用
file_exists($_SERVER['DOCUMENT_ROOT']."/path/to/file")
这样 php 就会为你提供绝对路径。
在 Mac 上,
cd
命令不区分大小写,但 PHP file_exists
函数不区分大小写! 因此,如果您有一个名为(例如)sites
的文件夹,那么
cd Sites
有效,但是
file_exists('/home/userid/Sites/mysite/config.php')
将返回 FALSE。
安全模式?
来自 PHP file_exists 文档:
警告
该函数对于文件返回 FALSE 由于安全模式无法访问 限制。然而这些文件 如果是的话,仍然可以包括在内 位于 safe_mode_include_dir 中。