我遇到的情况是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"];
答案 0 :(得分:8)
我刚刚遇到过这个问题,过去几个小时一直坚持这个问题。答案是您需要指定ABSOULTE路径才能使file_exists()起作用。您不能使用相对路径,例如'dir1 / images / image.jpg'或'../../ images/image1.jpg'。你需要指定'/rootdir/subdir/dir1/images/myimage.jpg'。
无论如何,这对我有用。
答案 1 :(得分:3)
这可能是文件权限问题。确保{I-{}}用户(用户在Mac OS X上运行apache {httpd}时)可以访问您正在测试的文件。
也许您可以尝试使用777作为权限位来测试/ tmp上的文件。
希望它有所帮助。
答案 2 :(得分:1)
由于安全模式限制,此函数对于无法访问的文件返回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"];
?>
答案 3 :(得分:1)
同时检查父目录及其所有父目录,以确保每个人都具有执行权限。
如果您在Apache下运行(而不是在命令行上),请记住它在Snow Leopard上的_www
用户和_www
组下运行。这就是需要访问的组。
答案 4 :(得分:0)
这可能有所帮助:
http://bugs.php.net/bug.php?id=48535
具体做法是:
我已将php.ini中的设置fastcgi.impersonate设置为1(如 推荐文件)。 如果我将它设置为0就可以了。
答案 5 :(得分:0)
以这种方式使用file_exists($_SERVER['DOCUMENT_ROOT']."/path/to/file")
php将为您提供绝对路径。
答案 6 :(得分:-1)
安全模式?
来自PHP file_exists documentation:
警告
此函数返回文件的FALSE 由于安全模式而无法访问 限制。但是这些文件 如果他们仍然可以包括在内 位于safe_mode_include_dir。