Мы используем следующую функцию для автоматического опознавания, если мы находимся на машине внутренне или на живом сервере и затем выбираем соответствующие конфигурации для различных компонентов:
function devIsLocal(){
$res=false;
$http_host=$_SERVER['HTTP_HOST'];
if($http_host=='localhost')$res=true;
if($http_host=='127.0.0.1')$res=true;
if(substr($http_host,-4)=='.lan')$res=true;
if(strpos($http_host, '.')===false)$res=true;
return($res);
}
Поскольку Вы видите, что это только полагается на значение HTTP_HOST.
Конечно, при использовании своего рода виртуального хоста локально как example.com затем, функция будет обманута.
Там какие-либо другие пути состоят в том, чтобы одурачить функцию? и что другие переменные/места мы могли посмотреть на определить, где мы?
'127.0.0.1' == $_SERVER["REMOTE_ADDR"]
Это никогда не будет оцениваться как ИСТИНА
в вашей действующей системе. :)
Конечно, если вы используете виртуальный хост локально, например example.com, тогда функция будет обманута.
Также, если хост не является локальным, но использует widlcard или дефолтный vhost defn и пользователь добавляет IP-адрес в файл hosts локально.
Я бы порекомендовал создать каталог на пути включения, который также существует в реальном времени, но не реплицируется там - и просто сохраните:
function getEnv(){
return 'Live';
}
или
function getEnv(){
return 'Test';
}
Если оба env находятся на одном сервере - вы все равно можете сделать это, установка include_path в конфигурации Apache или .htaccess.
Это также позволяет вам разделять потенциально конфиденциальные данные, специфичные для окружения, такие как хосты / пароли базы данных и ключи шифрования.
С.
Добавление к ответу Энди Шеллама...
Если вы используете mod_vhost_alias или имеете различные домены с одним и тем же (виртуальным) корнем документа, вы можете установить переменную, зависящую от параметров, например,
SetEnvIf SERVER_ADDR x.x.x.x APPLICATION_ENV=development
SetEnvIf HTTP_HOST abc.example.com APPLICATION_ENV=development
Создайте и затем ищите файл, который существует только в файловой системе живого сервера.
Конечно, ваши окружения должны быть как можно более похожими; я предлагаю примерно следующее: в каталоге /var/environment/ иметь файл с именем {devel|test|qa|staging|live}, в зависимости от сервера, на котором вы находитесь - затем просто проверить имя файла.
Конечно, вам нужно исключить этот файл из контроля версий и из любого процесса сборки, который у вас может быть.
Установите переменную окружения в конфигурации виртуального хоста Apache. Zend Framework делает это следующим образом.
Пример см. в Кратком руководстве по ZF (раздел "Создание виртуального хоста")
В файле httpd.conf или .htaccess поставьте:
SetEnv APPLICATION_ENV "development"
Затем в приложении используйте функцию getenv, чтобы получить значение:
$environment = getenv("APPLICATION_ENV");
if ($environment == "development")
{
// do development stuff
}
else if ($environment == "live")
{
// do live stuff
}