Как определить, является ли среда виртуальным хостом или нет?

У меня есть этот код здесь:

$config['SUBFOLDER'] = '/';
$config['APP_URL'] = 'http://'.$_SERVER['HTTP_HOST'].$config['SUBFOLDER'];

И APP_URL используется во всех шаблонах HTML. Проблема в том, что конфигурация должна быть настолько универсальной, насколько это возможно, поэтому при переключении среды нужно делать меньше.

Теперь, это работает так, когда я настроил виртуальный хост для своего проекта, но когда это не виртуальный хост, а своего рода localhost/myproject/ - $config['SUBFOLDER'] нужно вручную установить на /мой проект/

Как мне сделать это программно?

3 ответа

Решение

Вы можете установить переменную, например, в своем файле htaccess.

#.htccess
SetEnv APPLICATION_ENV development

Затем на вашем сайте сделайте проверку для этого:

<?php
//live
$config['SUBFOLDER'] = '/';
//on localhost - override live settings
if(APPLICATION_ENV === 'development')
{
  $config['SUBFOLDER'] = '/myproject';
}

При таком подходе вам нужно изменить только одну переменную в файле htaccess.

Если вы просто хотите проверить, работаете ли вы на локальном хосте, проверьте $_SERVER['HTTP_HOST'] также будет работать:

<?php
if($_SERVER['HTTP_HOST'] === 'localhost')
{
  $config['SUBFOLDER'] = '/myproject';
}

Я беру немного другой подход..

if ($_SERVER['HTTP_HOST'] == 'testingserver') // local environment here
{
    // local settings
}
else if ( // remote environment here
    $_SERVER['HTTP_HOST'] == 'www.something.com' ||
    $_SERVER['HTTP_HOST'] == 'something.com'
) 
{
    // remote settings
}
else // error.. this shouldn't happen
{
    echo $_SERVER['HTTP_HOST']; 
}

Проверьте URL-адрес, содержит ли он LOCALHOST или обычное доменное имя, и оберните вашу конфигурацию условно в зависимости от того, какой URL-адрес.

Другие вопросы по тегам