PHP ortam değişkenleri. PHP çevirisinde çevre değişkenleri hakkında bilmeniz gereken tek şey
Dikkat! Makale, Windows 7 altında yazılmıştır, ancak PHP eklenmesinde temel farklılıklar ortam Değişkenleri Diğer sürümlerde (Windows XP, Windows Vista, Windows 8, ...) Hayır.
Bilgi! Ayarlardaki tüm yollar, DENGER'in D: / Web klasörüne kurulmasının temelinde belirtilecektir. Makaledeki verileri kullanırken, bu yolu değiştirmeyi unutmayın.
Uygun için pHP kullanın. Windows konsolunda, ortam değişkenlerini yapılandırmanız gerekir. Aksi takdirde, konsoldan PHP ile çalışırken, PHP komutu yerine, tam yolunu PHP.exe dosyasına yazmanız gerekir.
DENWER'in D: / Web klasörüne kurulduğunu varsayalım.
Bilgisayar simgesindeki sağ fare düğmesi ile özellikler:
Ek sistem parametreleri:
"Gelişmiş" sekmesi, "Çarşamba parametreleri" düğmesi:
Grup " Sistem parametreleri"Yol değişkenini seçin ve Düzenle düğmesini tıklayın:
DICA D: \\ Web usr \\ \\ local \\ php5; ve "Tamam" ı tıklayın:
Denwer'ı yeniden başlatın. Şimdi konsolu açabilir (Win + R ve cmd girin) ve kontrol edebilirsiniz pHP çalışması Komuta girin:
Bu hataları düzeltmek için D: /web/usr/local/php5/Php.ini dosyasını açın. DEFENESLESS EXTASTION_DIR, ZEND_EXTENSION, Session.Save_Path ve bunlar için aşağıdaki değerleri ayarlayın.
Değişken ortam
PHP'de Çevre Değişkenleri
Senaryoya başlamadan hemen önce, sunucu ona bilgi içeren bir ortam değişkenleri iletir. Bazı değişkenlerde, bazı başlıkları içerir, ancak hepsi değil (tüm başlıkları elde etmek imkansız). Daha sonra, en önemli ortam değişkenlerinin bir listesini vereceğim.
Http_accept
Bu değişkende tüm listelendi MIME veri türleribu tarayıcı tarafından algılanabilir. Satır * / * tarayıcının herhangi bir türü anladığı anlamına gelir.
Http_accept \u003d image / gif, görüntü / x-xbitmap, görüntü / jpeg, görüntü / pjpeg, uygulama / x-shockwave-flaş, uygulama / vnd.ms-Excel, uygulama / msword, * / *
Http_referer
Bu değişken, kullanıcının buna geldiği sayfayla ilgili bilgileri temsil eder. Bu değişken, örneğin, kullanıcı hareketini sitenize göre izlemek için kullanılabilir ve ardından en popüler rotaları izleyin.
Http_referer \u003d http://www.spravkaweb.ru/php/pril/
Http_cookie.
Tüm çerezler bu değişkende URL kodlamasında saklanır.
Http_cookie \u003d hotlog \u003d 1; ZdedeBuggerPresent \u003d PHP, PHTML, PHP3; b \u003d b; PhpsessID \u003d 16805922A9258CDA274316E60F649CF8.
Http_user_agent
Kullanıcının tarayıcısını tanımlar. Bir tarayıcı türü oluşturmak için, bu dizgiyi kelimelerin varlığı için kontrol etmeniz gerekir: Tarayıcı Internet Explorer.MSIE substring mevcut olacak ve eğer sadece Mozilla kelimesi varsa, o zaman netscape.
Örneğin:
Http_user_agent \u003d Mozilla / 4.0 (uyumlu; MSIE 6.0; Windows NT 5.1; SV1; Myie2; Maxthon)
Http_host.
İçermek alan adı Komut dosyasının başladığı Web Sunucusu. Bu değişken, örneğin, belirli bir sunucuya eklenmemek için konum başlığında gerekli olan tam yolu oluşturmak için yeterli derecede uygundur.
Http_host \u003d www.spravkaweb.ru.
Http_from.
Adres e-posta Bir istek gönderen bir kullanıcı.
Sunucu adı.
Etki alanı adı veya sunucu IP adresi.
Server_name \u003d www.spravkaweb.ru.
Server_Software.
Müşterinin isteğine karşılık gelen sunucu programının adı ve versiyonu.
Sunucu portu.
Bu değişken, kullanıcı tarayıcısının ele alındığı sunucu bağlantı noktasını içerir. Bu genellikle 80'dir. Değişken, konum başlığı parametresini oluşturmak için de kullanılabilir.
Server_protocol
Değişken, talep etmek için kullanılan bilgi protokolünün adını ve sürümünü içerir.
Server_Protocol \u003d http / 1.1
Remote_addr.
Bu değişken, tarayıcının başlatıldığı kullanıcı düğümünün bir IP adresi (veya etki alanı adı) içerir.
Remote_port.
Sunucu yanıtı almak için kullanıcının tarayıcısı tarafından güvence altına alınan bağlantı noktası.
Remote_User.
Bir istek gönderme kimlik kullanıcı adı.
Script_name.
Bu komut dosyasını içeren dosyanın adını içerir. Bu değişken, konum başlığı yönlendirildiğinde (kendi kendine yönlendirildiğinde) oluşturulduğunda, eylem etiketi özniteliğinin değerini yerine getirmek için kullanımı uygundur.
Doküman kaynağı.
Web belge ağacının kök kataloğu.
Request_method
Kullanıcının veri iletimi sırasında geçerli olduğu yöntem. Yetkili bir senaryonun bu değişkenin temelinde belirlenmesi gerektiği, hangi yöntemi kullanıcıyı kullanacak ve karşılık gelen kaynaktan veri alacak ve transferin gerçekleştirileceğini hesaplamak için, örneğin, yalnızca postayla gerçekleştirileceğini hesaplamaması gerektiği belirtilmelidir. yöntem.
Query_string.
URL'de soru işaretinden sonra belirtildiği parametreleri içerir. Hem GET yöntemiyle hem de POST yöntemiyle (eğer ikinci durumdaysa, eylem etiketi özniteliğinde tanımlandılar.
Path_info.
Yol hakkında ek bilgi içerir.
Path_translated
Değişkende olduğu gibi aynı bilgi Path_info. Ön eki, web belge ağacının kök kataloğuna giden yolu ayarlayın.
İçerik türü.
Medya Talep Veri türü.
İçerik Uzunluğu.
Kullanıcı tarafından gönderilen veri bayt sayısını döndürür. Posta formunun alımında ve işlenmesi durumunda bu değişken analiz edilmelidir.
Gateway_Interface.
Sunucunun kullandığı CGI versiyonu.
Çevre değişkenlerini kullanma örneği
Surround değişkenleri:
echo "Вы пришли из: ".getenv("HTTP_REFERER")."
"; $ br \u003d getenv (" http_user_agent "); eğer (stpps ($ br," msie ")! \u003d\u003d false) echo" internet Explorer var
"; Başka yankı" Netscape ya da başkaları var.
"; IP'İNİZİ" ECHO: ".GETENV (" Remote_addr ")."
"; Echo" Burada tarayıcı satırındaki parametreler: ".getenv (" query_string ");?\u003e
Bu, çalıştığının çevreye bağlı olarak, PHP Servis Yapılandırmasını uygulamak için kısa bir süredir. Birisi daha zarif bir çözüm anlatırsa ya da önemsemeleri düzeltirse sevindim.
Ana fikir
Çalışma hizmeti, mikroferlik ve iştirakleri bir ekosistem içinde çevre değişkenleri kullanılarak yapılandırılabilir.Sorun
Bu yazıda "Çevre değişkenleri" çok defalarca tekrarlanır.PHP-FPM kutusundan, küresel ortam değişkenlerini (GetenV işlevi) görmezden gelirken, PHP CLI, onları alabilir.
Tarih öncesi
S.NV ile çalıştıysanız bu bölüm atlanabilir.
İÇİNDE şu an ZF2'de yazılmış bir proje üzerinde çalışıyorum. Projeyi yapılandırmak için farklı ortamlar için yapılandırma dosyaları kullanılmıştır. Bu, yaklaşık bu tür proje deposundaki konfigürasyonun çok sayıda kopyasını oluşturur:
- session.global.php.
- session.local.php.dist.
- session.unittest.php.dist.
- db.global.php.
- db.local.php.dist.
- db.unittest.php.dist.
Öyleyse, proje şimdi çevreyi dikkate alıyor, ama ...
Geliştirme, çalışma makinelerinde yapılırken, proje okuyor. Thenv dosyası ve her şey çalıştı. Ancak test ortamını açtığımda, kalıcı sistemik ortam değişkenlerine sorarsanız, PHP-FPM onları görmezden gelir. Google ve Stackoverflow'dan çeşitli tarifler, bilinen iki yöntemin kullanımının bir veya başka bir otomasyonuna azaltıldı:1. Değişkenlerin Nginx Parametre FASTCGI_PARAM SOMENV testi ile devredilmesi;
2. PHP-FPM iş akışı havuzu yapılandırmasında env formatındaki değişkenlerin montajı.
Hem birinci hem de ikinci seçenek bazı özel durumlar için uygundur. Ancak, paradigm'de "Çarşamba günü yapılandırın, bir uygulama değil" de düşünürseniz, bu tür yöntemler örneğinden çok daha zor olduğu ortaya çıktı, sadece.Env dosyasını projeye olan bir klasöre yerleştirin. Ama sonuçta, Orkestratör, CI sistemi veya sadece sistem yöneticisi Proje uygulamasının ayrıntılarını bilmemeliyim, bu zarif değil.
Önerilen çözüm yöntemi
Çeşitli tarifleri ağdan birleştirerek aşağıdaki çalışma çözümünü sattım.CentOS 7, PHP 5.6.14 altında test edildi.
1. açık /etc/php.ini - Değişkenleri_order \u003d "gpcs" diaribles_order \u003d "gpcs" üzerinde değiştirin \u003d "EGPCS" # Bundan sonra, PHP küresel uzay ortamı değişkenlerine ekleyecektir # http://php.net/manual/eni.core. php # ini.varibles-Sipariş 2. /etc/php-fpm.d/www.conf dosyasını açın, /etc/php-fpm.conf ile karıştırılmaması gereken farklı sistemler Belki farklı bir yerde, bu, PHP-FPM için WWW-FROSES'daki süreçlerin bir yapılandırmasıdır. - Birdenbire (veya değiştirinse) ekleyin (veya değiştirin): Clear_Env \u003d Hayır # Launched Warkers için Global Değişkenlerin Temizlenmesini Kapatın 3. Gerekli ortam değişkenlerini / etc / ortamına ayarlayın (standart sözdizimi A \u003d B) 4. ln - FS / etc / çevre / etc / sysconfig / php-fpm # şimdi config Büyüleyici değişkenler PHP-FPM servisi sadece Global Config 5. SystemCtl Daemon-Reload & & Service PHP-FPM yeniden başlatılacak bir bağlantı olacaktır
Simlink ile aynı yaklaşım, teoride, diğer hizmetlere uygulanabilir.
Önerilen çözümün artıları:
- / etc / çevrede depolanan değişkenler mevcuttur birden fazla uygulama. PHP'de Shell veya Getenv ("mysql_host") bir Echo $ Mysql_host'u arayabilirsiniz.
- / etc / ortamda açıkça belirtilmemiş değişken ortamlar, PHP-FPM'ye düşmeyecektir. Bu, servisin çalıştığı yalıtımlı sistemin çevresini izlemek için bir Orkestratör kullanılmasını sağlar.
Eksi:
- Ne yazık ki, PHP-FPM, Nginx ile analoji tarafından yeniden yüklemek için bir çalışma komutu bulamadım, bu nedenle değişim / vb / çevre durumunda, yapmalısınız. systemCtl Daemon-Reload & & Service PHP-FPM Yeniden Başlatma.
Önemli: Uygulamanız izole bir ortamda (Sunucu, Sanal, Konteyner) çalışmazsa, çevre değişkenlerinin tanımı, küresel alandaki isimlerin tesadüfleri nedeniyle sistemdeki bitişik hizmetleri tahmin edilemez şekilde etkileyebilir.