我正在为已经由其他人编程的应用程序的客户端项目设置测试环境。我在主机帐户中创建了一个名为iftc
的子目录,我们通常将其用于此类目的。
现在,找不到所有包含文件,因为它们是通过
引用的include($_SERVER['DOCUMENT_ROOT'].'/Includes/Connect.php');
等等。
如果仅为此特定客户端的测试目的设置全新主机帐户,我是否可以某种方式更改$_SERVER['DOCUMENT_ROOT']
的值以包含子文件夹iftc
文件在?
答案 0 :(得分:8)
有几种方法可以做到,但最好的方法是通过简单的函数调用来查找和替换$_SERVER['DOCUMENT_ROOT']
的所有用法。
所以你的例子会变成:
include(get_my_path() . '/Includes/Connect.php');
定义您当前的运行模式:
define('RUN_MODE_PRODUCTION', true); // in live mode
define('RUN_MODE_PRODUCTION', false); // debug mode
现在进行功能定义:
function get_my_path() {
if(RUN_MODE_PRODUCTION === true) {
return '/my/path/';
}
return '/my/other/path';
}
覆盖$_SERVER
中的实际值是个坏主意。如果其他人后来开始研究该项目,那么目前尚不清楚发生了什么。
这是我每天在制作中使用的环境引导的非常简化的版本。
当我设置我的大规模虚拟环境进行开发时,我遇到了这个问题。见http://blog.simonholywell.com/post/1516566788/team-development-server#virtual_document_root
因为我无法使用上述任何一种方法覆盖$_SERVER['DOCUMENT_ROOT']
,所以我必须在auto_prepend_file
中执行此操作。
我不建议您使用此技术来解决此特定问题,因为在这种情况下,在应用程序级别可以更好地解决此问题。
答案 1 :(得分:1)
您无法在PHP之前更改DOCUMENT_ROOT
环境变量。 (除非你摆弄CGI包装脚本)
Apache有SetEnv
指令,但这不适用于DOCUMENT_ROOT
(CGI env的特殊要求)。可以给它一个替代名称DOC_ROOT2
等。
但是你可以使用php.ini auto_prepend_file
设置在PHP中全局覆盖该变量,也可以使用.htaccess再次设置:
php_value auto_prepend_file ./override_docroot.php
然后该脚本将“全局”适应您的环境:
<?php
$_SERVER["DOCUMENT_ROOT"] = "...";
答案 2 :(得分:0)
这是通过Web服务器配置的,而不是通过PHP配置的。例如,在Apache中,它是DocumentRoot
指令。
为什么不使用相对路径呢?如果您使用../Includes/Connect.php
等路径,则可以完全独立于应用程序所在的位置。
答案 3 :(得分:0)
只需更改此站点的Apache配置的VirtualHost部分中的DocumentRoot /your/desired/path/
即可。文档为here。