我已经用PHP编程了好几年了,之前从未遇到过这个错误。
这是我的 widget.php 文件:
require_once('fruit.php');
echo "I am compiling just fine!!!";
我的 fruit.php 文件:
$bVar = true;
当这两个文件看起来像这样^然后一切都编译没有错误,我得到“我正在编译就好!!! ”成功消息。
现在,我将 fruit.php 文件移动一个目录级别,然后更改我的 widget.php 文件以反映目录重组:
require_once('../fruit.php');
echo "I am compiling just fine!!!";
现在突然间,我得到了PHP警告&致命错误:
Warning: require_once(../fruit.php) [function.require-once]: failed to open stream: No such file or directory in /webroot/app/widget.php on line 1
Fatal error: require_once() [function.require]: Failed opening required '../fruit.php' (include_path='.:/usr/local/php5/lib/php') in /webroot/app/widget.php on line 1
在我使用PHP的这些年里,我从未看到require_once()之前就像这样失败了。有什么想法?!?!
答案 0 :(得分:13)
也许你在错误的工作目录中。无论如何,依靠它(除了你显然想要访问它)是一个坏主意。使用
require __DIR__ . '/../fruit.php';
或与5.3之前的
require dirname(__FILE__) . '/../fruit.php';
提醒一下,以..
或.
开头的路径不已针对包含路径解析,但仅针对当前工作目录。
答案 1 :(得分:1)
请记住,在第二种情况下,您指定了一个路径,但在第一种情况下,它使用了包含路径。也许而不是明确指定..在第二种情况下,你可以修改你的包含路径。
答案 2 :(得分:0)
我知道这个问题已经过时了,但它仍然很重要。
根据我的经验,"open_basedir" directive最有可能导致此问题。
答案 3 :(得分:-1)
require_once('fruit.php');
无论当前的工作目录是什么,都会在与widget.php相同的目录中搜索fruit.php。
require_once('../fruit.php');
这会在当前目录上方的目录中搜索fruit.php,而不是在一个widget.php所在的目录中搜索。