Определите разработку и производственный сервер в PHP - PullRequest
23 голосов
/ 11 сентября 2009

Я ежедневно работаю с двумя серверами приложений: одна разработка, одна работа. На этих блоках живут разнообразные приложения от разных разработчиков, а также некоторые скрипты, запускаемые через cron. В настоящее время я использую флаг -D для httpd, чтобы я мог идентифицировать свой производственный сервер в коде, т.е. isset($_SERVER['DEV']). К сожалению, это не работает для скриптов, запускаемых из командной строки, поскольку они не находятся под зонтиком Apache.

По сути, Я бы хотел простой и понятный способ идентифицировать разработку и производство, которая доступна для каждой строки кода .

Что я исключил:

  • auto_prepend_file - мы уже используем эту директиву в некоторых приложениях, и у вас не может быть более одного автозаполнения.

Что я сейчас изучаю:

  • Пользовательское расширение - я уверен, что создание нового расширения, которое определяет только новую константу (возможно, зависит от настройки ini), не будет самой сложной вещью в мире, но у меня нет опыта в этой области

Итак, есть ли у вас какие-то хитрости для идентификации dev / prod, которые не включают внедрение кода в каждый скрипт или приложение?

Ответы [ 5 ]

22 голосов
/ 11 сентября 2009

использовать переменную окружения

Просто установите переменную окружения. Он работает на Windows и Linux, теперь их даже называют одним и тем же. Тогда просто отметьте $_ENV["DEVVSPROD"]

7 голосов
/ 12 сентября 2009

Я обычно просто делаю что-то вроде этого:

if ($_SERVER['HTTP_HOST'] == 'localhost') // or any other host
{
     // development
}

else
{
     // production
}
2 голосов
/ 28 июля 2013

Это пришло мне в голову

if(filter_var(ini_get('display_errors'), FILTER_VALIDATE_BOOLEAN))
{
    // development
} 
else {
    // production
}

или лучший подход

define('IN_DEVELOPEMENT', filter_var(ini_get('display_errors'), FILTER_VALIDATE_BOOLEAN));
2 голосов
/ 09 февраля 2010

Я использовал $_ENV['HOSTNAME'], а php_uname("n") в качестве резервной копии:

/**  
 * Returns true if we are working on a development server, determined by server's
 * hostname. Will generate an error if run on an unknown host.
 */
public static function isdev()
{
  static $isdev = null;

  // don't run function body more than once
  if( null !== $isdev ) {
    return $isdev;
  }    

  // prefer HOSTNAME in the environment, which will be set in Apache.
  // use `uname -n' as a backup.
  if( isset( $_ENV['HOSTNAME'] ) ) {
    $hostname = $_ENV['HOSTNAME'];
  } else {
    $hostname = php_uname("n");
  }    

  switch( $hostname ) {
    case 'production1.example.com':
    case 'production2.example.com':
    case 'production3.example.com': $isdev = false; break;

    case 'dev1.example.com':
    case 'dev2':
    case 'dev2.example.com': $isdev = true; break;

    default: trigger_error( 'HOSTNAME is set to an unknown value', E_USER_ERROR );
  }    

  return $isdev;
}
0 голосов
/ 09 февраля 2010

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

  • L = Live
  • D = Dev
  • T = Тест
  • U = UAT

Это делает определение среды, в которой вы работаете, как внутри, так и вне Apache, довольно тривиальным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...