我见过几个类似的问题,但没有答案在我的情况下工作,除了它可能与权限有关。
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我如何获得用来执行它的用户名?
3条答案
按热度按时间qcbq4gxm1#
差不多解决了。
为了调试,我想把DBFILE移到PHP脚本所在的文件夹中,然后检查它是否能找到它-它找到了。然后我把DBFILE在树中一个接一个地移到文件夹中,看看它在哪里停止找到它。
如果整个路径中只有一个文件夹没有所有用户的执行权限(xx 5),则会出现找不到该文件的情况,并且
file_exists
返回false
。因此,解决方案是在一个完全可执行的位置创建另一个文件夹(
/var/www/data/
在chmod 755 data
之后工作),并将文件移到那里。hfsqlsce2#
你使用的是绝对路径还是相对路径?因为
file_exists()
不支持HTTP地址(绝对路径)。但是你可以输入相对路径。我遇到过同样的问题,它修复了它。unlink()
也有同样的问题。示例:
hpxqektj3#
我也遇到过类似的问题,可以通过JulienD的回答来解决:如果文件系统(Linux)中某个目录的execute标志没有设置,那么PHP(仍然)使用glob或scandir扫描该目录。但是,随后使用file_exists()对结果列表进行检查,我想找到断开的符号链接,结果返回false!因此,解决方案是为该目录设置Execute权限,如JulienD所述。