PHP 在尝试包含/要求包含/需要另一个脚本的脚本时抛出致命错误


PHP throws a Fatal Error when trying to include/require a script that includes/requires another script

我所知,基本上就是这样。我可以包含或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() [函数要求]:需要打开失败"../常量/常量.php' (include_path='.;C:''Program Files''Xampp 1.7.7''php''PEAR') 在 C:''Home''Workspace''PHP''DD''src''log''test.php 第 7 行

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

选项 +关注符号链接

重写引擎开启

重写规则!(gif|jpg|png|css)$ index.php

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


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

require_once _SERVER['DOCUMENT_ROOT']。/DD/src/constants/constants.php";

我想我不会使用相对路径,然后。

这样做的原因是相对路径来自具有第一个要求/包含的文件。例如,如果我有一组看起来像这样的文件:

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

如果测试.php有

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

和酒吧.php有

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

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

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