Intereting Posts
sfErrorNotifierPlugin по заданию symfony Как получить случайное значение из массива php datetime-> diff вычисляет неправильное количество часов (3 слишком много) таблица обновляет пустое пространство, когда пользователь ничего не вводит в текстовое поле Каковы мои возможности проверять наличие вирусов при загрузке PHP? Как вставить теги ссылок между тегами заголовка в HTML с помощью SimpleHtmlDom PHP: доступ к массиву на лету Ошибка при попытке получить данные из 2 таблиц codeigniter Потерянное соединение с сервером MySQL при «считывании исходного пакета связи», системная ошибка: 0 при подключении к Mysql в cpanel Как отображать сообщения WordPress в 3 столбца по горизонтали? Почему PHP имеет знак $ перед переменными? Отправка электронной почты через SMTP в zend framework Хорошо ли реализовать REST api с помощью сеансов? Преобразование ajax относительных путей к абсолютным путям с помощью codeigniter Левая ассоциация левой тройки

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

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

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

То, что я исключил:

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

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

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

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

Solutions Collecting From Web of "Определить сервер разработки и производства в PHP"

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

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

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

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

Я закончил использование $_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; } 

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

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

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

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

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