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

u5rb5r59  于 2022-11-16  发布在  Apache
关注(0)|答案(3)|浏览(174)

我见过几个类似的问题,但没有答案在我的情况下工作,除了它可能与权限有关。
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脚本读取,而不需要运行脚本本身?2我如何获得用来执行它的用户名?

qcbq4gxm

qcbq4gxm1#

差不多解决了。
为了调试,我想把DBFILE移到PHP脚本所在的文件夹中,然后检查它是否能找到它-它找到了。然后我把DBFILE在树中一个接一个地移到文件夹中,看看它在哪里停止找到它。
如果整个路径中只有一个文件夹没有所有用户的执行权限(xx 5),则会出现找不到该文件的情况,并且file_exists返回false
因此,解决方案是在一个完全可执行的位置创建另一个文件夹(/var/www/data/chmod 755 data之后工作),并将文件移到那里。

hfsqlsce

hfsqlsce2#

你使用的是绝对路径还是相对路径?因为file_exists()不支持HTTP地址(绝对路径)。但是你可以输入相对路径。我遇到过同样的问题,它修复了它。unlink()也有同样的问题。
示例:

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

hpxqektj3#

我也遇到过类似的问题,可以通过JulienD的回答来解决:如果文件系统(Linux)中某个目录的execute标志没有设置,那么PHP(仍然)使用glob或scandir扫描该目录。但是,随后使用file_exists()对结果列表进行检查,我想找到断开的符号链接,结果返回false!因此,解决方案是为该目录设置Execute权限,如JulienD所述。

相关问题