Подтвердить что ты не робот

Определить сервер разработки и производства в PHP

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

else
{
     // production
}

Ответ 3

В итоге я использовал $_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;
}

Ответ 4

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

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));

Ответ 5

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

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

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