Canlı ve evreleme web siteleri ve sistem komut arasında dosya farkları (PHP) önleyin

5 Cevap php

Ben bir dev ve canlı çevre arasındaki PHP yapılandırma farklılıkları korumak için iyi bir yol bulmaya çalışıyorum. Ben komut (see below) Apache tarafından çalıştırdığınızda farkları işlemek için nasıl biliyorum, ama onlar koşmak edilmez zaman on the command line, örneğin cron üzerinden.

Background info:

What do I mean by "configuration differences"? çoğu kodunu dükkan gibi , bunu canlı web sitesine gitmeden önce biz kodu test sitemize halka açık olmayan 'sahneleme' sürümünü çalıştırın. Biz Subversion kullanmak ve bir dalı olarak canlı 'Trunk' olarak web sitesi ve 'Sahneleme' var. Kod dosyaları depo sürümü en az farklılıklar varsa yaşamak için evreleme gittiğinde onu hayatı kolaylaştırır. Ama belli ki, bazı ayrıntılar, örneğin, farklı olmak gerekir DB bağlantı ayrıntıları.

How configuration differences are solved with Apache

PHP, biz aşağıdaki gibi belirli değişkenler şube ayarlayın:

switch ($_SERVER['HTTP_HOST']) {
    case 'ourstagingurl.com':
        $dbPassword = "blahblah";
        break;
    default:
        $dbPassword = "blahblah";
}

. ya da belirli sitesiyle alakalı htaccess dosyasında aşağıdaki koydu:

php_value dbPassword "blahblah"

Why I can't resolve configuration differences using the CLI?

Bir komut dosyası CLI üzerinde çalıştırdığınızda, örneğin $_SERVER olarak hiçbir super globallerinin var. Ben olabilir include bir yapılandırma dosyası bir mutlak yolu kullanarak ama nasıl komut canlı veya evreleme olup olmadığını bilebilir? Ben ortamını belirten bir komut satırı argümanı geçmek olabilir ama ben daha iyi bir yolu olduğunu umuyordum?

5 Cevap

Canlı ve evreleme aynı sunucu (neden değil mi sanallaştırma kullanmak?) Iseniz o zaman muhtemelen komut yani argümanları geçen başvurmak zorunda olacak. php script.php staging evreleme ve php script.php live, canlı site için diyoruz. BTW 'bilmiyorum olmazdı durumda, argümanlar erişilebilir PHP komut $ argv kullanılarak -> http://www.php.net/manual/en/reserved.variables.argv.php.

Belki dosyanın yolunun bir parçası almak ve "çevre" gibi kullanabilirsiniz rağmen. yani. DOSYA ihtiyacı sonra fazladan boşluk - dosya düzeni evreleme için / proje / hazırlama / script.php canlı ve / proje / canlı / script.php olduğunda dirname (__FILE __) kullanarak komut kendisinden çevreyi almak kolay olmalı kaldırılır - ve ondan / proje klasörünü sıyırma. Çok aptalca ama işe yarayacak: s.

Hey, ben benzer bir kurulum ile bir şirket için çalışmak. Ben genellikle evreleme ve canlı sunucuları bir ortak ve genel bir yapılandırma dosyasını değiştirmek hem scenerio kurmak ne. Site evreleme hem dağıtıldığında ve canlı olduğunda bilgi de yanlış olacaktır ve her yerde bir kez değiştirilmesi gerekir. Değiştirmek parçaları tahrip tarafından modifiye olarak not edilecek ve daha sonraki svn güncellemeleri yıkıcılık tarafından üzerine olmayacak çünkü Ancak, bu sadece bir kez gerçekleşmesi gerekir.

$host = isset( $_SERVER['HTTP_HOST'] ) ? $SERVER_['HTTP_HOST'] : php_uname('n');

switch ( $host ) 
{
    case 'ourstagingurl.com':
        $dbPassword = "blahblah";
        break;
    default:
        $dbPassword = "blahblah";
}

Php version => 5.3 ise o zaman gethostname () yerine kullanılabilir.

Jurassic önerildiği gibi yapabilirsiniz, veya bir ortam değişkeni ayarlamak ve $_ENV aracılığıyla okuyabilirsiniz.

Benim uygulamaları bazılarında, sadece geliştirme sunucuda değerleri geçersiz kılmak için var olan bir dosya eklemek için çalışmayın. Ben korkunç @ operatörünü kullanın, ama siz de bir is_file () yapabilirdi.

@include 'includes/debug.php';

debug.php bazı değişkenleri ayarlamak girişiminde:

define('DEBUG', true);
define('DB_PASSWORD', 'foobar');

Ben bu dosyayı görmezden svn söyle. Bu benim geliştirme çıkış etrafında sopa ve üretim üzerine minimal etkisi vardır.

Daha genel Ben CLI ve web uygulamaları hem de çalışır gibi kontrol ikilisini kullanır, ama sen aynı kutuda hem şubeleri var ifade ettik, böylece çıktı.