Identificar o servidor de desenvolvimento versus produção em PHP

Eu trabalho com dois servidores de aplicativos diariamente: um desenvolvimento, uma produção. Uma variedade de aplicativos de desenvolvedores diferentes atuam nessas checkboxs, bem como alguns scripts que são executados via cron. Atualmente, estou usando a bandeira -D para httpd para que eu possa identificar o meu servidor de produção no código, ou seja. isset($_SERVER['DEV']) . Infelizmente, isso não funciona para scripts executados a partir da linha de comando, uma vez que não estão sob o guarda-chuva do Apache.

Essencialmente, eu gostaria de uma maneira simples e limpa de identificar desenvolvimento versus produção que esteja disponível para cada linha de código .

O que eu exclui:

  • auto_prepend_file – já estamos usando esta diretiva em alguns aplicativos, e você não pode ter mais de um autoprepend.

O que estou atualmente explorando:

  • Extensão personalizada – Tenho a certeza de criar uma nova extensão que apenas define uma nova constante (possivelmente influenciada por uma configuração ini) não seria a coisa mais difícil do mundo, mas não tenho experiência prévia nesta área.

Então, tem algum truque para identificar o dev / prod que não envolve a injeção de código em cada script ou aplicativo?

use uma variável de ambiente

Basta configurar uma variável de ambiente. Ele funciona no Windows e no linux, eles são chamados da mesma coisa agora. Então cheque $_ENV["DEVVSPROD"]

Normalmente, eu apenas faço algo como isto:

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

Eu acabei usando $_ENV['HOSTNAME'] , com php_uname("n") como um backup:

 /** * 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; } 

Isso veio à minha mente

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

ou uma melhor abordagem

 define('IN_DEVELOPEMENT', filter_var(ini_get('display_errors'), FILTER_VALIDATE_BOOLEAN)); 

Uma empresa pela qual trabalhei anteriormente usava uma convenção de servidores de sufixo da seguinte forma:

  • L = Ao vivo
  • D = Dev
  • T = Teste
  • U = UAT

Isso torna determinante o ambiente em que você está trabalhando, tanto dentro como fora do Apache, bastante trivial.