Menü
Bedava
giriş
ana  /  Tavsiye / PHP ortam değişkenleri. PHP çevirisinde çevre değişkenleri hakkında bilmeniz gereken tek şey

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.

Sayfada, komut dosyasının parametreleri olmadan başlarken aradığında (belirli bir senaryo adına takılmaması için).

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öntemini hem de posta yöntemi olduğunda (eğer belirtildiyse) her ikisi de mevcut olduklarını hatırlayın. nitelik eylemi. Etiket ).

Path_info.

İçermek ek Bilgiler yol hakkında.

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

Değişkenler

RNR değişkenlerinde dolar işareti ile başlar ( $ ). Bu işaret, herhangi bir sayıda alfasayısal karakter ve alt çizgi karakterleri uygulayabilir, ancak ilk karakter bir rakam veya alt çizgi olamaz. Ayrıca, RNR'deki değişkenlerin isimlerinin anahtar kelimelerin aksine, kayıt defterine duyarlı olduğu da unutulmamalıdır.

PNP'deki değişkenleri bildirirken, değişkenin türünü açıkça belirtmek gerekli değildir, aynı değişken program sırasında farklı türlere sahip olabilir.

Değişken, değeri atama sırasında başlatılır ve program yürütülene kadar var. Bunlar., Bir Web sayfası durumunda, istek tamamlanana kadar.

Harici değişkenler

Müşterinin talebi bir Web sunucusu tarafından analiz edildikten ve RNR makinesine aktarıldıktan sonra, ikincisi, sorgula ilgili veri içeren ve gerçekleştirildiği zaman mevcut olan bir dizi değişken belirler. İlk rnr alır değişken ortam Sisteminiz ve sunucuda bulunan senaryolar için, aşağıdaki istemci sistem özellikleri için RNR komut dosyası ile çevrili aynı isim ve değerlerle değişkenler oluşturur. Bu değişkenler yerleştirilir İlişkisel dizi $ Http_env_vars (Diziler hakkında daha fazla bilgi, Bölüm 4'te bulunabilir).

Doğal olarak, değişken dizisi $ Http_env_vars sistemik olarak bağımlıdır (aslında olduğu için değişken ortam). Makineniz için ortam değişkenlerinin değerlerini görüntüleyin (UNIX) veya SET komutunu kullanabilirsiniz.

RNR daha sonra sorgu dizesini analiz ederken oluşturulan bir grup elde eden değişkenler oluşturur. Sorgu dizesi değişkende saklanır $ Query_string. ve sembolü takip eden bilgileri temsil eder " ? "İstenen URL'de. RNR sorgunun satırını sembollerle kırar & üzerinde ayrı elemanlarVe sonra bu öğelerin her birinde "\u003d" işareti arar. Eğer "\u003d" işareti bulunursa, eşitlik işaretinin solunun sembollerinden adıyla bir değişken oluşturulur. Aşağıdaki formu düşünün:

Eylem \u003d. "http: //localhost/php/test.php" Yöntem \u003d " almak."\u003e HDD: Type \u003d " mETİN."İsim \u003d" HDD."/>
CD-ROM: Type \u003d " mETİN."İsim \u003d" CD-ROM."/>
Type \u003d " sunmak"/>

HDD hattında bu formdaysanız, örneğin "Maxtor" ve "NEC" CDROM String String'de, aşağıdaki istek formunu oluşturacaktır:

http: //localhost/php/test.php? HDD \u003d MAXTOR & CDROM \u003d NEC

Bizim durumumuzda, PNP aşağıdaki değişkenleri oluşturacak: $ HDD. \u003d "Maxtor" ve $ Cdrom. \u003d "NEC".

Bu değişkenlerle komut dosyanızdan (ABD'den - Test.php) geleneksel değişkenlerle birlikte çalışabilirsiniz. Bizim durumumuzda, basitçe görüntüleniyorlar:

eko.("

HDD $ HDD

"); eko.("

Cdrom $ cdrom

"); ?>

Sayfanın talebi, posta yöntemi kullanılarak gerçekleştirilirse, ayrıca bir diziye de yorumlanır ve yerleştirilir. $ Http_post_vars.

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.syt/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.

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 ise, MSIE substratı mevcut olacak ve eğer Mozilla'nın yalnızca Mozilla'yı varsa, Netscape'dir.

Örneğin:

Http_user_agent \u003d Mozilla / 4.0 (uyumlu; MSIE 6.0; Windows NT 5.1; SV1; Myie2; Maxthon)

Http_host.

Komut dosyasının başladığı Web sunucusunun etki alanı adını içerir. 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.syt.

Http_from.

Bir istek göndererek e-posta adresi.

Sunucu adı.

Etki alanı adı veya sunucu IP adresi.

Server_name \u003d www.syt.

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_port \u003d 80.

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. Sayfada, komut dosyasının parametreleri olmadan başlarken aradığında (belirli bir senaryo adına takılmaması için).

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

Değişken ortam

Surround değişkenleri:


"; $ 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.
Bu kopyaların birbirlerini sürekli olarak senkronize etmesi gerekir. Ek olarak, belirli bir PHP mantığını kendi içinde saklar, bu da kodun çoğaltılması oluşturur.

Ö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.