【问题标题】:What is the point of using $_SERVER['document_root']?使用 $_SERVER['document_root'] 有什么意义?
【发布时间】:2015-09-01 06:11:24
【问题描述】:

有什么优势?如果我对项目的文件结构了如指掌,为什么不能只使用相对 url?例如,如果我们想要文件夹trial 中的一个文件,并且该文件名为test.php,这样做有什么好处

require $_SERVER['document_root'] . "/trial/test.php";

什么时候可以做

require "test.php"; //assuming we are in the trial folder

谢谢!

【问题讨论】:

  • 如果您必须将其交给某人(例如)怎么办?他们可能不知道他们的手背。就我个人而言,我使用了一个配置文件,其中定义了我使用的常用文件夹,所有这些都基于站点的根目录(我放置配置文件的位置),所以当我包含时,我会做 ROOT_DIR.'/folder/file.php' 或者如果它是一个通用的函数文件夹,就像FUNCTIONS.'/myfunction.php' all based on root (我的配置文件位置)

标签: php server


【解决方案1】:

$_SERVER['DOCUMENT_ROOT'] 非常有用,尤其是在您的开发环境中工作时。如果您正在处理大型项目,您可能会在页面中包含大量文件。例如:

<?php 
//Defines constants to use for "include" URLS - helps keep our paths clean 

        define("REGISTRY_CLASSES",  $_SERVER['DOCUMENT_ROOT']."/SOAP/classes/"); 
        define("REGISTRY_CONTROLS", $_SERVER['DOCUMENT_ROOT']."/SOAP/controls/"); 

        define("STRING_BUILDER",     REGISTRY_CLASSES. "stringbuilder.php"); 
        define("SESSION_MANAGER",     REGISTRY_CLASSES. "sessionmanager.php"); 
        define("STANDARD_CONTROLS",    REGISTRY_CONTROLS."standardcontrols.php"); 
?>

在开发环境中,您很少使用根文件夹,尤其是在您的机器上本地运行 PHP 并且使用 DOCUMENT_ROOT 是保持 URL 一致性的好方法时。这将节省您准备将应用程序从您的机器部署到生产服务器的数小时工作(更不用说让您为包含路径失败而头疼)。

不过这是个人选择,很多框架使用dirname(__FILE__)根据已知文件计算应用程序路径,通常是index.php

【讨论】:

  • 感谢您的评论 Suhail,但是在开发环境中,文件不会总是从根文件夹运行,所以在 linux 上,例如 /www/ 文件夹?因此,无论您更改到什么环境,相对 url 都不会一直保持不变吗?谢谢
  • @LostProgrammer 因为这是一个服务器变量,您可能会或可能不会看到它,这取决于您在哪个 Web 服务器下运行(尤其是 IIS)。处理此问题的一种方法是设置变量。 $_SERVER['DOCUMENT_ROOT'] = "C:/some/absolute/path"; $_SERVER['DOCUMENT_ROOT'] = dirname(__FILE__);
  • @LostProgrammer 相对 URL 很酷,但是当根更改时会发生什么?您想手动更改每组指令吗?这不会增加破解密码的可能性吗?
  • 是的,您是正确的,非常感谢您的洞察力
猜你喜欢
  • 2013-08-12
  • 2011-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-07
  • 2013-06-01
  • 1970-01-01
相关资源
最近更新 更多