I'm running a PHP script from the command line, so superglobals are not defined. How can I get the $_SERVER["DOCUMENT_ROOT"] without using the superglobal $_SERVER?
Superglobals such $_SERVER
haven't been set yet (because Apache/Nginx/etc) sets these values. As you're running from the command line, there is no Apache/Nginx/etc to set them, thus resulting in them becoming NULL
.
There are 2 alternatives you can use.
__DIR__
You can use the magic constant __DIR__
to output the directory of the current file.
php -r "echo __DIR__;"
/var/www/html
This will give different results depending on where you run it from. I.e: /var/www/html/lib/foo
will return differently if you ran it from /var/www/html/views/index
. - which is probably not what you're looking for.
Within your bootstrap file (as mentioned in this comment), you can set your own constant to be used throughout your application.
define('__DOCUMENT_ROOT__', __DIR__);
Now from within the page you run (as long as it uses your bootstrap file), you can call __DOCUMENT_ROOT__
constant to get the value that would mirror $_SERVER["DOCUMENT_ROOT"]
. Though this would require you to use relative paths to include your bootstrap file.