I'm currently working on a PHP project and am looking for a way to get the URL for the root of the website; I have a configuration file at the root so I'm thinking as to using that to figure out the "base URL." I'm looking for a way to do it dynamically so I can locate the URL of the root of the website, i.e. http://domain.com/my_app/
. I am doing my best to avoid using relative paths and am using PHP to generate the URLs for whatever I am using. For example, I am using PHP to generate CSS code and the CSS code link to images so I would like to get an absolute URL in here instead of a relative path.
my_app/
admin/
resources/
css/
admin-css.php
imgs/
login.png
resources/
css/
css.php
imgs/
my-image.png
shared-image.png
config.php
In my resources/css/css.php
file, I am looking at getting the "base URL" so I can generate an absolute URL to the imgs
folder like http://domain.com/resources/imgs/my-image.png
but currently I am getting http://domain.com/resources/css/imgs/my-image.png
since the defines below look at getting the directory of the loaded PHP file, not the included one. I would also like to share images between the folders (i.e. access the shared-image.png
file from the admin
folder) so getting the base URL would be ideal in generating links. The reason I an avoiding relative paths is because I have a function that creates a URL, createURL()
, so I can get all the URLs working without having to hard code anything.
<?php
DEFINE('HTTP_TYPE', $_SERVER['HTTP_X_FORWARDED_PROTO']);
DEFINE('HTTP_ROOT', $_SERVER['HTTP_HOST']);
DEFINE('HTTP_FOLDER', dirname($_SERVER['PHP_SELF']) . '/');
DEFINE('BASE_URL', HTTP_TYPE . "://" . HTTP_ROOT . HTTP_FOLDER);
function createURL($pathFromRoot)
{
return BASE_URL . $pathFromRoot;
}
All of these defines are located in my configuration file, so I am thinking that the best way to do this is to get the URL for the config file (http://domain.com/my_app/config.php
) and just strip the "config.php." Keep in mind, the website could be hosted deeper in a folder structure http://domain.com/my_app/another/folder/config.php
or no sub folders http://domain.com/config.php
.
Is this possible, if so how can it be done? Or is there another approach I should follow?