繁体   English   中英

除了使用$ _SERVER ['DOCUMENT_ROOT']之外,还有更好的方法可以返回目录根目录吗?

[英]is there a better way to go back to the directory root other than using $_SERVER['DOCUMENT_ROOT']?

我正在尝试学习一种更好的方法来回到根目录。 我听说使用$ _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']并没有告诉我错误是他们修复它的方法吗?

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

所以你需要以下规则:

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

  2. 如果编写自己使用的代码只能在服务器或两个服务器之间跳转,那么假设DOCUMENT_ROOT是正确的,并且如果您移动服务器并且需要,则将其写入。


如果预编译配置变量,如何提供默认的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__用于当前工作目录

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM