Автоматическое опознавание внутренняя/внешняя среда разработки

Мы используем следующую функцию для автоматического опознавания, если мы находимся на машине внутренне или на живом сервере и затем выбираем соответствующие конфигурации для различных компонентов:

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 затем, функция будет обманута.

Там какие-либо другие пути состоят в том, чтобы одурачить функцию? и что другие переменные/места мы могли посмотреть на определить, где мы?

8
задан zaf 9 April 2010 в 11:50
поделиться

5 ответов

'127.0.0.1' == $_SERVER["REMOTE_ADDR"]

Это никогда не будет оцениваться как ИСТИНА в вашей действующей системе. :)

11
ответ дан 5 December 2019 в 05:34
поделиться

Конечно, если вы используете виртуальный хост локально, например example.com, тогда функция будет обманута.

Также, если хост не является локальным, но использует widlcard или дефолтный vhost defn и пользователь добавляет IP-адрес в файл hosts локально.

Я бы порекомендовал создать каталог на пути включения, который также существует в реальном времени, но не реплицируется там - и просто сохраните:

function getEnv(){
  return 'Live';
}

или

function getEnv(){
  return 'Test';
}

Если оба env находятся на одном сервере - вы все равно можете сделать это, установка include_path в конфигурации Apache или .htaccess.

Это также позволяет вам разделять потенциально конфиденциальные данные, специфичные для окружения, такие как хосты / пароли базы данных и ключи шифрования.

С.

0
ответ дан 5 December 2019 в 05:34
поделиться

Добавление к ответу Энди Шеллама...

Если вы используете mod_vhost_alias или имеете различные домены с одним и тем же (виртуальным) корнем документа, вы можете установить переменную, зависящую от параметров, например,

SetEnvIf SERVER_ADDR x.x.x.x APPLICATION_ENV=development
SetEnvIf HTTP_HOST abc.example.com APPLICATION_ENV=development
3
ответ дан 5 December 2019 в 05:34
поделиться

Создайте и затем ищите файл, который существует только в файловой системе живого сервера.

Конечно, ваши окружения должны быть как можно более похожими; я предлагаю примерно следующее: в каталоге /var/environment/ иметь файл с именем {devel|test|qa|staging|live}, в зависимости от сервера, на котором вы находитесь - затем просто проверить имя файла.

Конечно, вам нужно исключить этот файл из контроля версий и из любого процесса сборки, который у вас может быть.

1
ответ дан 5 December 2019 в 05:34
поделиться

Установите переменную окружения в конфигурации виртуального хоста 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
}
15
ответ дан 5 December 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: