6

我正在尝试学习一种更好的方法来返回根目录。我听说使用 $_SERVER 不是最安全的方法。我想知道是否有更好的方法。所以我可以在 url 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']没有告诉我错误是他们修复它的方法吗?

4

1 回答 1

4

问题是你不能依赖 $_SERVER 数组中的东西,因为你可能会得到各种各样的值。

所以你需要以下规则:

  1. 如果编写公共代码,请将路径放在配置文件中。然后,如果 $_SERVER 在用户的服务器上不正确,他们可以覆盖它。DOCUMENT_ROOT如果您喜欢使用一些简单的规则(见下文),您可以帮助预先完成他们的配置。

  2. 如果编写代码供自己使用,并且只会在一两台服务器之间跳转,那么假设DOCUMENT_ROOT是正确的,如果您移动服务器并且需要,则 rwwrite 它。


DOCUMENT_ROOT如果预编译配置变量,如何提供默认值。

  1. 在 Apache 上,检查CONTEXT_DOCUMENT_ROOT. DOCUMENT_ROOT几乎总是安全的,但有几个地方可能是错误的 - 您提供的链接就是这种情况。如果 apache 使用 mod_alias 或 mod user_dir。在这些情况下,您需要使用CONTEXT_DOCUMENT_ROOT哪个更安全。但请注意,Apache 仅添加CONTEXT_DOCUMENT_ROOT了一个月左右,因此除非您安装了最新版本,否则您需要重新使用DOCUMENT_ROOT.
  2. DOCUMENT_ROOT- 看上面
  3. 使用PATH_TRANSLATED(减去 的长度PHP_SELF)来构建当前工作目录的路径。
  4. 使用SCRIPT_FILE_NAME(减去 的长度PHP_SELF)来构建当前工作目录的路径。
  5. 使用全局变量__DIR__ 到当前工作目录

然后,当您拥有这些详细信息时,请检查您知道该目录中存在的文件 - 如果存在,您可能已经找到了正确的路径。如果没有,请尝试下一个。

于 2012-09-11T06:39:20.077 回答