PHP üretim sunucusuna vs gelişimini belirlemek

5 Cevap

Bir gelişme, bir üretim: Ben bir günlük bazda iki uygulama sunucuları ile çalışır. Farklı geliştiricilerin uygulamalar çeşitli bu kutuları canlı, hem de cron üzerinden çalışan bazı komut. Şu vea, -D bayrağı kullanıyorum to httpd so that I can identify my production server in code, ie. isset($_SERVER['DEV']). Ne yazık ki, bu onlar Apache şemsiyesi altında değiliz çünkü komut satırından çalışan bir komut dosyası için çalışmaz.

Esasen, I would like a clean, simple way to identify development vs. production that is available to every line of code.

Ben dışladı ne:

  • auto_prepend_file - biz zaten bazı uygulamalarda bu direktifi kullanıyorsanız ve birden fazla autoprepend olamaz.

Şu vea keşfetmek Neyim:

  • Özel uzatma - Ben sadece (muhtemelen ini ayarı etkilenmiştir) yeni bir sabit dünyadaki en zor şey olmaz tanımlayan yeni bir uzantısı oluşturarak eminim, ama ben bu alvea daha önce hiçbir deneyimi yok.

Yani, her komut dosyası veya uygulama içine kodunu enjekte içermeyen dev / eşya belirlenmesi için herhangi bir hile var mı?

5 Cevap

use an environment variable

Sadece bir ortam değişkeni ayarlamak. Windows ve Linux üzerinde çalışır, onlar şimdi bile aynı şey denir. Sonra sadece kontrol $_ENV["DEVVSPROD"]

Ben genellikle sadece böyle bir şey yapın:

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

else
{
     // production
}

Ben yedek olarak php_uname("n") ile $_ENV['HOSTNAME'] kullanarak sona erdi:

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

Benim çalıştığım bir şirket önceden aşağıdaki gibi sunucuları suffixing bir kongre kullandı:

  • L = Canlı
  • D = Dev
  • T = Test
  • U = UAT

Bu, hem iç ve Apache dışında, oldukça önemsiz, üzerinde çalıştığınız ortamı belirleyen yapar.

Bu benim aklıma geldi

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

veya daha iyi bir yaklaşım

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