PHP: как не жестко программировать корень веб-приложения - PullRequest
7 голосов
/ 04 июля 2011

В настоящее время в моем файле конфигурации есть следующее:

define('DOCROOT', dirname(__FILE__).DIRECTORY_SEPARATOR);
define('WEBROOT', 'http://localhost/samples/');

Первая строка работает отлично. Я могу включить файл конфигурации в любом месте, а затем использовать DOCROOT константу, как и ожидалось.

Вторая строка также работает, но она жестко запрограммирована, что означает, что когда я загружаю этот файл на свой веб-сервер, он будет ошибочным. Там должно быть http://samples.example.com. Есть ли хороший способ как-то предотвратить это жесткое кодирование? Я как бы думаю, что мне нужно где-то жестко кодировать, и в таком случае, что и как мало я могу сойти с рук?

Ответы [ 5 ]

3 голосов
/ 04 июля 2011

Я использую следующий код для поиска базового URL:

function getBaseURL() {
    return 'http' . (isset($_SERVER['HTTPS']) ? 's' : '') . '://'
         . $_SERVER['HTTP_HOST']
         . rtrim(dirname($_SERVER['SCRIPT_NAME']), '/\\')
         . '/'
    ;
}
2 голосов
/ 04 июля 2011
define('WEBROOT', 'http://'.$_SERVER['HTTP_HOST'].'/');
1 голос
/ 04 июля 2011

Вы можете пойти еще дальше и убедиться, что у пользователя есть доступ через HTTPS, вы даете ему HTTPS ....

    if (isset($_SERVER["HTTPS"]) && $_SERVER['HTTPS'] == 'on') {
            $target_url = "https://" . $_SERVER["SERVER_NAME"];
    } else {
            $target_url = "http://" . $_SERVER["SERVER_NAME"];
    }
   define('WEBROOT', $target_url);
0 голосов
/ 04 июля 2011
'http://'.$_SERVER['HTTP_HOST']. str_replace(str_replace("\\","/",str_replace(realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR, "", realpath($_SERVER['SCRIPT_FILENAME']))), "", $_SERVER['PHP_SELF']);

Я проверил это на локальном хосте. Поместите это в свой конфигурационный файл.

0 голосов
/ 04 июля 2011

Один из способов «взломать» это проверить внешний запрашивающий IP.Если ip равен 127.0.0.1, определите WEBROOT как http://localhost/samples, в противном случае определите его как http://samples.example.com

...