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


when including() or require() do I always have to use ../../ relative to my file? Is there a simple way?

我正在构建一个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类型错误。它从未说过文件不存在的任何内容。提前谢谢你。

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

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()用处。如果您需要使用包含,那么您做错了什么。

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

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

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

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

使用这个:

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

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

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

chdir($_SERVER['DOCUMENT_ROOT']);

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

相关文章: