php include_once失败了,因为“无法打开流:没有这样的文件或目录”消息,尽管存在它正在抱怨的文件,并且chmod到777以试图缓解问题
警告:include_once()[function.include]:打开包含的'../i_utility/WCHelper.php'失败(include_path ='。:/ usr / share / pear:/ var / www / html / we_ /')在第6行的/var/www/i_/php/w_corner/modules/i_ers/i_ers.module中。
从命令行我可以cd到包含源代码文件的目录(/ var / www / i_ / php / w_corner / modules / i_ers),我可以找到关于哪个php抱怨“没有这样”的文件: ../ i_utility / WCHelper.php
实际上,我可以在向apache用户提起之后执行上述操作,甚至可以触摸该文件并查看其上次修改的时间戳已更改:
-bash-3.2$ whoami
apache
-bash-3.2$ cd /var/www/i_/php/w_corner/modules/i_ers
-bash-3.2$ ls -l ../i_utility/WCHelper.php
-rwxrwxrwx 1 root root 32112 Sep 14 09:49 ../i_utility/WCHelper.php
-bash-3.2$ touch ../i_utility/WCHelper.php
-bash-3.2$ ls -l ../i_utility/WCHelper.php
-rwxrwxrwx 1 root root 32112 Sep 27 17:08 ../i_utility/WCHelper.php
鉴于上述所有情况,在这些情况下,可能导致PHP的include_once失败的原因是什么?
答案 0 :(得分:4)
PHP的包含路径有点违反直觉,特别是当你相对路径提供它时。您希望路径相对于当前文件(就像使用CSS一样),但PHP将它们解释为相对于当前工作目录,这通常是入口点PHP文件所在的目录(例如{{ 1}})。
最简单的解决方法是使用/var/www/my_site/index.php
,它始终映射到当前脚本文件的绝对位置。
答案 1 :(得分:1)
也许您的脚本在错误的目录中运行?
在失败的包含之前放置echo '<pre>'.htmlentities(getcwd()).'</pre>';
并查看它是否显示正确的路径。
答案 2 :(得分:0)
为什么不使用文件的完整路径?例如
include_once("/var/www/i_/php/w_corner/modules/i_utility/WCHelper.php");