0

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

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

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

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

选项 +FollowSymLinks

重写引擎开启

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

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


更新:我发现使用绝对路径有效,如下所示:

需要一次 $_SERVER['DOCUMENT_ROOT']."/DD/src/constants/constants.php";

我想我不会使用相对路径,那么。

4

1 回答 1

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。我希望这能消除任何困惑。

于 2012-04-10T03:33:28.750 回答