Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

can I change value of $_SERVER['DOCUMENT_ROOT']?

Tags:

php

I am setting up a testing environment for a client project for an application that was already programmed by someone else. I have created a subdirectory called iftc in the hosting account that we normally use for such purposes.

Now, all include files are not being found as they are being referenced through

include($_SERVER['DOCUMENT_ROOT'].'/Includes/Connect.php'); 

And so on.

Short of setting up a whole new hosting account just for testing purposes for this particular client, can I change the value of $_SERVER['DOCUMENT_ROOT'] somehow to include a subfolder iftc that the files are in?

like image 807
Natalia Avatar asked Dec 28 '22 10:12

Natalia


1 Answers

My preferred solution

There are a couple of ways to do it but the best is to simply find and replace all uses of $_SERVER['DOCUMENT_ROOT'] with a simple function call.

So your example would become:

include(get_my_path() . '/Includes/Connect.php');

Define your current run mode:

define('RUN_MODE_PRODUCTION', true); // in live mode
define('RUN_MODE_PRODUCTION', false); // debug mode

Now for the function definition:

function get_my_path() {
    if(RUN_MODE_PRODUCTION === true) {
        return '/my/path/';
    }
    return '/my/other/path';
}

Overriding the actual values in $_SERVER is bad idea. Should some one else later come to work on the project it will not be clear what is happening.

This is a very simplified version of the bootstrapping of environments that I use in production every day.

Where you can't do it

  • Apache SetEnv family of functions
  • mod_rewrite RewriteRule ^$ /home \[E=VAR:VAL\]

Another way you can do it

When I setup my mass virtual environment for developing I encountered this issue. See http://blog.simonholywell.com/post/1516566788/team-development-server#virtual_document_root

Because I could not override $_SERVER['DOCUMENT_ROOT'] using either of the above methods I had to do it in an auto_prepend_file.

I would not recommend that you use this technique to solve this particular issue however as it is better solved at the application level in this case.

like image 102
Treffynnon Avatar answered Jan 11 '23 10:01

Treffynnon