当包括()或require()时,我总是必须使用../../相对于我的文件?有一个简单的方法吗?

时间:2012-04-24 23:30:13

标签: php path include directory require

我正在构建一个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 个答案:

答案 0 :(得分:4)

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

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

或在5.3之前的PHP版本中你可以这样做

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

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

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

__DIR____FILE__都是由PHP设置的安全常量,可以信任。

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

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

在其他新闻中,我无法想到include()用法。如果你需要使用include,你做错了。

答案 1 :(得分:1)

这包括发明的路径。如果您经常使用公用文件夹之外的文件夹,请创建一个包含它的路径。通过这种方式,您可以将其视为与其他所有文件夹位于同一文件夹中。

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

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

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

答案 2 :(得分:0)

使用此:

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

这会将你带到文档根目录,然后从那里构建其余的文件......

答案 3 :(得分:0)

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

chdir($_SERVER['DOCUMENT_ROOT']);

现在,您可以包含文件,就像当前文件位于根文件夹中一样。