Is it a good idea to use $_SERVER['DOCUMENT_ROOT'] in includes?
例如,这是个好主意吗?
1
| require_once($_SERVER['DOCUMENT_ROOT'].'/include.php'); |
如果您在同一台服务器上有两个虚拟主机,一个虚拟主机,一个虚拟主机,并且使用不同的Apache DocumentRoots,则这将避免当include的来源未知并且可以在任何目录中时,不必包含绝对路径。
(注意:以下部分中的文件路径是相对于Web根目录的。实际上,它们类似于/var/www/app/core/init.php,其中/var/www/app是Web根目录)
例如:我有一个/core/init.php,它是使用整个网站(/file.php,/dir/file.php or /dir/dir/file.php)上各个位置的相对路径来调用的。
然后,此init.php在fund目录中包含/core的子目录(如/core/func/userfunctions.php中)的几个功能页。
因此,在init.php中,我可以使用$_SERVER方法,因为如果使用相对路径并尝试从类似/dir/file.php的页面调用函数,该方法就会中断。
我看不到任何问题,但总的来说可能会出什么问题?
我见过没有设置$_SERVER['DOCUMENT_ROOT']或不是您期望的情况(即未在CLI或旧的IIS中设置,或在某些CGI设置中无效)的情况。
因此,您可以使用dirname(__FILE__)来获取调用该行的脚本的路径。然后,您可以从那里引用相对路径,例如
1
| include dirname(__FILE__) . '/../../other/file.php'; |
当文件的目录结构已知且不会更改时,我采用上述方法。
如果DOCUMENT_ROOT不可用,则以下是合适的替代:
1
| substr($_SERVER['SCRIPT_FILENAME'], 0, -strlen($_SERVER['SCRIPT_NAME'])); |
-
那对我没有用。 我只是简单地使用了:include ..\\wp-load.php;因为我的项目与wp-includes,wp-content,ap-admin位于同一目录下...
-
@FranciscoCorralesMorales include dirname(__FILE__) . ....otherfile.php;是正确的方法。 那是因为PHP寻找当前的工作目录(cwd),然后附加..\\wp-load.php;,所以这可能并不总是如您所愿。 在此处阅读有关getcwd的更多信息:http://php.net/manual/en/function.getcwd.php
您不需要这样做。 PHP默认情况下会在文档根目录中查找包含的文件。
您可以使用set_include_path($ new_include_path)更改此行为,或在php配置文件中编辑include_path。
另外,从http://php.net/manual/en/reserved.variables.server.php:
'DOCUMENT_ROOT'
The document root directory under which the current script is executing, as defined in the server's configuration file.
-
我不确定我是否能充分解释自己。 病态更新我的问题。
例如,如果使用URL重写,当您发现/there/are/so/many/paths/in/the/url/of/this/页面中的include仍在工作时,您将感到非常高兴!