PHP file_exists返回false但该文件确实存在

时间:2015-10-15 11:23:36

标签: php apache file-exists

我见过几个类似的问题,但在我的情况下没有答案,除了它可能与权限有关。

Apache提供的PHP脚本告诉我unable to open database file

当我打印到该文件的路径时,它返回一个有效的路径,比如说DBPATH。该文件确实存在于该位置;我给了它及其父文件夹777权限;我给了他们user:user访问权限,其中user是所有脚本文件所属的sudoer。我对整个htdocs/文件夹做了同样的事情,以防万一。

当我打印file_exists(DBPATH)时,它返回false。很可能是权限问题,但我不知道我应该更改PHP以获得访问权限。我也试过了apache:apache。我不能su apache(用户不可用)。

我的脚本位于htdocs/ DBFILE 就在某个地方(我尝试了/tmp/test,全部都在777,但也没有运气。)

没有safe_mode,PHP 5.4刚刚安装,CentOS7。

请有人给我一个线索,至少帮助调试它。 也许是这样的:如何在不运行脚本本身的情况下检查我的文件是否可以从apache / my php脚本中读取?如何获取用于执行它的用户的名称?

2 个答案:

答案 0 :(得分:2)

解决,或多或少。

要调试我有想法将DBFILE移动到PHP脚本所在的同一文件夹,并检查它是否可以找到它 - 它确实如此。然后我在树枝中一个接一个地移动DBFILE文件夹,看看它在哪里找不到它。

如果整个路径中只有一个文件夹没有所有用户的执行权限(xx5),则无法找到该文件,并且file_exists返回false

所以解决方案是在完全可执行的地方创建另一个文件夹(/var/www/data/chmod 755 data工作),并将文件移到那里。

答案 1 :(得分:0)

你使用的是绝对路径还是相对路径? 因为 file_exists() 不适用于 HTTP 地址(这是一个绝对路径)。但是可以输入相对路径。 我有同样的问题,它修复了它。 unlink() 也有同样的问题。

示例:

$file_relative_path = "./wp-content/uploads/fileDirectory/fileName.jpg";  
if (file_exists($file_relative_path)) {  
    unlink($file_relative_path);  
}