我正在构建一个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']);
现在,您可以包含文件,就像当前文件在根文件夹中一样。