我可以更改$ _SERVER ['DOCUMENT_ROOT']的值吗?

Nat*_*lia 4 php

我正在为已经由其他人编程的应用程序的客户端项目设置测试环境.我创建了一个iftc在托管帐户中调用的子目录,我们通常将其用于此类目的.

现在,所有包含文件都没有被找到,因为它们被引用

include($_SERVER['DOCUMENT_ROOT'].'/Includes/Connect.php'); 
Run Code Online (Sandbox Code Playgroud)

等等.

如果没有设置一个全新的主机帐户只是为了测试这个特定客户端的目的,我可以改变$_SERVER['DOCUMENT_ROOT']某种程度的值来包含iftc文件所在的子文件夹吗?

Tre*_*non 8

我的首选解决方案

有几种方法可以做到这一点,但最好的方法是$_SERVER['DOCUMENT_ROOT']通过简单的函数调用来简单地查找和替换所有用法.

所以你的例子将成为:

include(get_my_path() . '/Includes/Connect.php');
Run Code Online (Sandbox Code Playgroud)

定义当前的运行模式:

define('RUN_MODE_PRODUCTION', true); // in live mode
define('RUN_MODE_PRODUCTION', false); // debug mode
Run Code Online (Sandbox Code Playgroud)

现在为功能定义:

function get_my_path() {
    if(RUN_MODE_PRODUCTION === true) {
        return '/my/path/';
    }
    return '/my/other/path';
}
Run Code Online (Sandbox Code Playgroud)

覆盖实际值$_SERVER是个坏主意.如果其他人后来开始研究这个项目,那么目前还不清楚发生了什么.

这是我每天在生产中使用的环境引导的非常简化版本.

你无法做到的地方

另一种方法可以做到

当我设置我的大规模虚拟环境进行开发时,我遇到了这个问题.见http://blog.simonholywell.com/post/1516566788/team-development-server#virtual_document_root

因为我不能$_SERVER['DOCUMENT_ROOT']使用上述任何一种方法覆盖,所以我必须在一个方法中进行覆盖auto_prepend_file.

我不建议您使用此技术来解决此特定问题,因为在这种情况下,它在应用程序级别更好地解决了.