在包含中使用$ _SERVER ['DOCUMENT_ROOT']是个好主意吗?

Alf*_*lfo 13 php

例如,这是一个好主意吗?

require_once($_SERVER['DOCUMENT_ROOT'].'/include.php');
Run Code Online (Sandbox Code Playgroud)

如果在同一服务器上有两个虚拟主机,一个用于实时,一个用于开发,具有不同的Apache DocumentRoot,这将避免在包含源未知时包含绝对路径,并且可能位于任何目录中.

(注意:以下部分中的文件路径是相对于Web根目录的.它们实际上就像是,Web根目录/var/www/app/core/init.php在哪里/var/www/app)

例如:我有一个/core/init.php,它使用来自网站(/file.php,/dir/file.php or /dir/dir/file.php)所在地的相对路径调用.

这个init.php然后包括几个功能页面,在基金目录中,一个子目录/core(如/core/func/userfunctions.php).

所以,在init.php中,我可以使用该$_SERVER方法,因为如果我使用相对路径并尝试从类似的页面调用函数,它会中断/dir/file.php.

我看不出有任何问题,但总的来说可能会出错?

dre*_*010 10

我见过$_SERVER['DOCUMENT_ROOT']没有设置或不是你期望的情况(即未在CLI或旧IIS中设置,或在某些CGI设置中无效).

因此,您可以使用dirname(__FILE__)获取调用行的脚本的路径.然后,您可以从那里引用相对路径,例如

include dirname(__FILE__) . '/../../other/file.php';
Run Code Online (Sandbox Code Playgroud)

当文件的目录结构已知且无法更改时,我使用上述方法.

如果DOCUMENT_ROOT没有,以下是合适的替代品:

substr($_SERVER['SCRIPT_FILENAME'], 0, -strlen($_SERVER['SCRIPT_NAME']));
Run Code Online (Sandbox Code Playgroud)