尝试包含/要求包含/需要其他脚本的脚本时,PHP会抛出致命错误

时间:2012-04-10 02:57:58

标签: php include xampp pear require-once

据我所知,基本上就是这样。我可以包含或require_once没有包含/ require_once的脚本,但如果确实如此,那么PHP会抛出这个错误:

  

警告:require_once(../ constants / constants.php)[function.require-once]:无法打开流:C:\ Home \ Workspace \ PHP \ DD \ src \ log \中没有这样的文件或目录第7行的test.php

     

致命错误:require_once()[function.require]:无法打开所需的'../constants/constants.php'(include_path ='。; C:\ Program Files \ Xampp 1.7.7 \ php \ PEAR')在第7行的C:\ Home \ Workspace \ PHP \ DD \ src \ log \ test.php

路径正确。我担心我可能搞砸了Apache Webserver的一些配置文件(我创建了一个.htaccess文件来使用mod_rewrite来创建更好的URL)。 .htaccess文件内容就是这样:

  

选项+ FollowSymLinks

     

上的RewriteEngine      

RewriteRule!。(gif | jpg | png | css)$ index.php

我的apache文档根目录是“C:/ Home / Workspace / PHP”


更新: 我发现使用绝对路径可以起作用,如下所示:

  

require_once $ _SERVER ['DOCUMENT_ROOT']。“/ DD / src / constants / constants.php”;

我想我当时就不会使用相对路径了。

1 个答案:

答案 0 :(得分:3)

原因是相对路径来自带有第一个require / include的文件。例如,如果我有一组看起来像这样的文件:

|--bar
|   |--foo
|   |   |--foo.php
|   |--bar.php
|--test.php

如果test.php有

require("./bar/bar.php")

和bar.php

require("./foo/foo.php")

然后这会失败,因为相对URL必须相对于工作目录(调用require / include的顶层文件)。如果我将bar.php更改为require("./bar/foo/foo.php"),那么程序将成功完成。确保不会发生这种情况的最佳方法是,如Basti所说,不使用相对URL。通常建议使用dirname(__FILE__)之类的各种函数来构造URL。

最后一点,.htaccess文件中的重写规则不会做任何事情,它只会操纵客户端URL。我希望能够解决任何困惑。