Here's a problem that I've been running into lately - a misconfigured apache on a webhost. This means that all scripts that rely on $_SERVER['DOCUMENT_ROOT']
break. The easiest workaround that I've found is just set the variable in some global include files that is shared, but it's a pain not to forget it. My question is, how do I determine the correct document root programatically?
For example, on one host, the setup is like this:
$_SERVER['DOCUMENT_ROOT'] == '/htdocs'
The real document roots are:
test.example.com -> /data/htdocs/example.com/test
www.example.com -> /data/htdocs/example.com/www
And I'd like a script that's run from www.example.com/blog/
(on the path /data/htdocs/example.com/www/blog
) to get the correct value of /data/htdocs/example.com/www
.
On another host, the setup is a bit different:
$_SERVER['DOCUMENT_ROOT'] == '/srv'
test.example.com -> /home/virtual_web/example.com/public_html/test
www.example.com -> /home/virtual_web/example.com/public_html/www
Is there any solution to this? Or is the only way simply not to ever rely on $_SERVER['DOCUMENT_ROOT']
and fix all the software that I'm running on my sites? Fixing this on the hosting's side doesn't seem to be an option, I've yet to encounter a host where this is was configured correctly. The best I got was a document root pointing to www.example.com, which was at least inside open_basedir - they used yet another naming scheme, www.example.com would point to /u2/www/example_com/data/www/
.
In PHP5 there is the magic constant __FILE__
that contains the absolute path of the file in which it appears. You can use it in combination with dirname to calculate the document root.
You can put a statement like the following one in a config file
define ('DOCUMENT_ROOT', dirname(__FILE__));
this should do the trick
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With