PHP file_exists 返回 false 但文件确实存在
Posted
技术标签:
【中文标题】PHP file_exists 返回 false 但文件确实存在【英文标题】:PHP file_exists returns false but the file does exist 【发布时间】:2016-01-13 20:01:21 【问题描述】:我见过几个类似的问题,但在我的情况下没有答案,除了它可能与权限有关。
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
,但也没有运气)。
没有安全模式,新安装的 PHP 5.4,CentOS7。
请至少有人给我一个线索来帮助调试它。 也许例如:如何在不运行脚本本身的情况下检查我的文件是否可以从 apache/我的 php 脚本中读取?如何获取用于执行它的用户名?
【问题讨论】:
可以通过cat DBPATH
打开文件吗?
file_exists
不会说谎,有些地方不对劲。我猜你的DBPATH
不正确。请注意,如果您将文件包含在某处,则当前目录是包含所有内容的根文档的目录。
您是否尝试过使用文件的绝对路径?
我正在打印绝对路径(以 /home/user/... 开头,如 pwd -P
所述),我可以“ls 解决了,或多或少。
为了调试,我想将 DBFILE 移动到 PHP 脚本所在的同一文件夹中,并检查它是否可以找到它——它确实找到了。然后我在树中一个接一个地移动 DBFILE,看看它在哪里停止找到它。
如果整个路径中只有一个文件夹对所有用户(xx5)没有执行权限,则文件找不到,file_exists
返回false
。
因此解决方案是在完全可执行的位置创建另一个文件夹(/var/www/data/
在chmod 755 data
之后工作),然后将文件移动到那里。
【讨论】:
【参考方案2】:您使用绝对路径还是相对路径?
因为file_exists()
不适用于 HTTP 地址(这是一个绝对路径)。但是你可以输入相对路径。
我有同样的问题,它解决了它。 unlink()
也是同样的问题。
示例:
$file_relative_path = "./wp-content/uploads/fileDirectory/fileName.jpg";
if (file_exists($file_relative_path))
unlink($file_relative_path);
【讨论】:
以上是关于PHP file_exists 返回 false 但文件确实存在的主要内容,如果未能解决你的问题,请参考以下文章
PHP file_exists 返回 false 但文件确实存在
当变量在文件名中时,PHP file_exists 返回 false
即使我的 linux 上存在文件,php file_exists 也会返回 false