我正在构建一个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
类型错误。它从未说过有关该文件的任何内容。先感谢您。
答案 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
然而,更好的是,创建一个类自动加载器......
答案 2 :(得分:0)
使用此:
include($_SERVER['DOCUMENT_ROOT'] . '/inc/connect.php');
这会将你带到文档根目录,然后从那里构建其余的文件......
答案 3 :(得分:0)
您可以在php.ini中设置包含路径,也可以使用chdir
更改工作目录。我更喜欢两者,为了安全起见,但这很好用:
chdir($_SERVER['DOCUMENT_ROOT']);
现在,您可以包含文件,就像当前文件位于根文件夹中一样。