据我所知,基本上就是这样。我可以包含或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”;
我想我当时就不会使用相对路径了。
答案 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。我希望能够解决任何困惑。