我正在努力学习返回根目录的更好方法。我听说使用$_SERVER不是最安全的方法。我想知道是否有更好的方法。所以我可以在网址example.com/exp/my.php上得到这样的东西
这是我得到的。
include ($_SERVER['DOCUMENT_ROOT'].'/cpages/cmain/func/init.php');
include($_SERVER['DOCUMENT_ROOT'].'/cpages/toppart.php');
include($_SERVER['DOCUMENT_ROOT'].'/cpages/boxes/image.php');
include($_SERVER['DOCUMENT_ROOT'].'/cpages/bottonpart.php');
我把它改成
define ('DOCUMENT_ROOT', dirname(__FILE__));
include (DOCUMENT_ROOT.'/cpages/cmain/func/init.php');
include(DOCUMENT_ROOT.'/cpages/toppart.php');
include(DOCUMENT_ROOT.'/cpages/boxes/image.php');
include(DOCUMENT_ROOT.'/cpages/bottonpart.php');
但现在它给了我一个错误
Warning: include(C:'xampp'htdocs'backbone'image/cpages/cmain/func/init.php)
($_SERVER['DOCUMENT_ROOT']
没有告诉我错误是他们解决问题的方法吗?
问题是您不能依赖$_SERVER数组中的anthing,因为您可能会获得各种值。
因此,您需要以下规则:
-
如果编写公共代码,请将路径放在配置文件中。然后,如果$_SERVER在用户的服务器上不正确,他们可以覆盖它。如果你喜欢使用一些简单的规则,你可以使用
DOCUMENT_ROOT
帮助预先完成他们的配置(见下文)。 -
如果为自己编写的代码只会在一两台服务器之间跳转,那么假设
DOCUMENT_ROOT
是正确的,如果您移动服务器并需要,则重新编写。
如果预编译配置变量,如何提供默认的DOCUMENT_ROOT
。
- 在Apache上,检查
CONTEXT_DOCUMENT_ROOT
。DOCUMENT_ROOT
几乎总是安全的,但有几个地方可能会出错——您提供的链接就是这样。如果apache正在使用mod_alias或mod user_dir。在这些情况下,您需要使用更安全的CONTEXT_DOCUMENT_ROOT
。但请注意,Apache只添加了CONTEXT_DOCUMENT_ROOT
一个月左右,所以除非您有最新的安装,否则您需要重新使用DOCUMENT_ROOT
DOCUMENT_ROOT
-见上文- 使用
PATH_TRANSLATED
(减去PHP_SELF
的长度)构造到当前工作目录的路径 - 使用
SCRIPT_FILE_NAME
(减去PHP_SELF
的长度)构造到当前工作目录的路径 - 将全局变量
__DIR__
用于当前工作目录
然后,当你有了这些详细信息后,请检查该目录中是否存在一个你知道的文件——如果存在,那么你可能找到了正确的路径。如果没有,请尝试下一个。