1

我正在构建一个 web 应用程序,它的 php 文件分布在不同的目录中,所以一个典型的文件可能有几个包含。所有这些文件无处不在。

一个 php 文件可能如下所示:

include('../../some.php');
require('../../some.php');

在另一个文件中你可能有这样的东西:

 include('../../../../some.php');
require('../../../../some.php');

重点是,这可能会有点失控,并且有点难以跟踪。有没有办法可以做到这一点,这样我就不需要一直这样做../../..了?

我试过这样做:

include('http://www.mywebsite.com/some.php');
require('http://www.mywebsite.com/some.php');

但它似乎不起作用,但有趣的是,我在使用 require 时不会得到 PHP 错误,只会出现 call to function x() error, function or object doesn't exist类型错误。它从来没有说过文件不存在。先感谢您。

4

4 回答 4

4

不要相信$_SERVER变量。在某些环境中,它们可以由发出请求的用户设置/更改。最好在索引/引导文件中手动定义基本路径并在需要时使用它。

define('SYSTEM_PATH', __DIR__ . '/');

或在 5.3 之前的 PHP 版本上,您可以执行此操作

define('SYSTEM_PATH', dirname(__FILE__) . '/');

现在,您始终可以知道文件的路径。

require(SYSTEM_PATH . 'lib/class.php');

__DIR__和都是PHP 设置__FILE__安全常量,可以信任。

您可以像这样自动加载类:

function __autoload($class_name)
{
    require SYSTEM_PATH . strtolower($class_name) . '.php';
}

在其他新闻中,想不出. include()如果你需要使用 include 你做错了什么。

于 2012-04-24T23:53:00.573 回答
1

这就是发明包含路径的目的。如果您的公用文件夹之外有一个您经常使用的文件夹,请创建一个指向它的包含路径。这样,您可以将其视为与其他所有内容位于同一文件夹中。

http://php.net/manual/en/function.set-include-path.php

然而,比这更好的是,创建一个类自动加载器......

http://php.net/manual/en/language.oop5.autoload.php

于 2012-04-24T23:50:36.410 回答
0

用这个:

include($_SERVER['DOCUMENT_ROOT'] . '/inc/connect.php');

这会将您带到文档根目录,然后从那里构建其余部分......

于 2012-04-24T23:31:40.267 回答
0

您可以在 php.ini 中设置包含路径,也可以使用chdir. 为了安全起见,我更喜欢两者,但这很好用:

chdir($_SERVER['DOCUMENT_ROOT']);

现在您可以像当前文件在根文件夹中一样包含您的文件。

于 2012-04-24T23:32:21.750 回答