Menü
Bedava
kayıt
ev  /  Tavsiye/ Php ortam değişkenleri. PHP Ortam Değişkenleri Çevirisi Hakkında Bilmeniz Gereken Her Şey

Php ortam değişkenleri. PHP Ortam Değişkenleri Çevirisi Hakkında Bilmeniz Gereken Her Şey

Dikkat! Makale, Windows 7 altında yazılmıştır, ancak PHP'ye eklemede temel farklılıklar vardır. Ortam Değişkenleri diğer sürümler (Windows XP, Windows Vista, Windows 8, ...) yoktur.

Bilgi! Ayarlardaki tüm yollar, Denwer'ın D: / web klasörüne kurulu olduğu gerçeğine göre belirtilecektir. Makaledeki verileri kullanırken, bu yolu kendinize göre değiştirmeyi unutmayın.

uygun için PHP kullanarak Windows konsolunda ortam değişkenlerini ayarlamanız gerekir. Aksi takdirde, konsol üzerinden PHP ile çalışırken php komutu yerine php.exe dosyasının tam yolunu yazmanız gerekecektir.

D: / web klasöründe Denwer'ın kurulu olduğunu varsayalım.

"Bilgisayar" simgesine sağ tıklayın Özellikler:

Ek sistem parametreleri:

Gelişmiş sekmesi, Ortam Ayarları ... düğmesi:

grup " Sistem parametreleri", Yol değişkenini seçin ve düzenle düğmesine basın:

D: \ web \ usr \ local \ php5 satırını ekleyin; ve "Tamam" düğmesini tıklayın:

Denwer'ı yeniden başlatın. Şimdi konsolu açabilir (Win + R ve cmd yazın) ve kontrol edebilirsiniz. PHP çalışması, şu komutu girin:

Bu hataları düzeltmek için D: /web/usr/local/php5/php.ini dosyasını açın. extension_dir, zend_extension, session.save_path değişkenlerini bulun ve bunları aşağıdaki değerlere ayarlayın.

Ortam Değişkenleri

PHP'de Ortam Değişkenleri

Komut dosyasını başlatmadan hemen önce, sunucu bazı ortam değişkenlerini bilgi ile birlikte iletir. Bazı değişkenler bazı başlıklar içerir, ancak hepsini içermez (tüm başlıkları alamazsınız). Aşağıda en önemli ortam değişkenlerinin bir listesini sağlayacağım.

HTTP_ACCEPT

Bu değişken hepsini listeler MIME veri türleri tarayıcı tarafından algılanabilir. * / * satırı, tarayıcının herhangi bir türü anladığı anlamına gelir.

HTTP_ACCEPT = resim / gif, resim / x-xbitmap, resim / jpeg, resim / pjpeg, uygulama / x-shockwave-flash, uygulama / vnd.ms-excel, uygulama / msword, * / *

HTTP_REFERER

Bu değişken, kullanıcının verilen sayfaya geldiği sayfa hakkındaki bilgileri temsil eder. Bu değişkeni örneğin bir kullanıcının sitenizdeki hareketini izlemek ve ardından en popüler rotaları görüntülemek için kullanabilirsiniz.

HTTP_REFERER = http://www.spravkaweb.ru/php/pril/

HTTP_COOKIE

Bu değişken, tüm URL kodlu tanımlama bilgilerini saklar.

HTTP_COOKIE = sıcak günlüğü = 1; ZDEDebuggerPresent = php, phtml, php3; b = b; PHPSESSID =

HTTP_USER_AGENT

Kullanıcının tarayıcısını tanımlar. Tarayıcı türünü belirlemek için, bu dizede kelimelerin olup olmadığını kontrol etmeniz gerekir: eğer tarayıcı - Internet Explorer, o zaman MSIE alt dizisi mevcut olacaktır ve yalnızca Mozilla kelimesi mevcutsa, o zaman Netscape'dir.

Örneğin:

HTTP_USER_AGENT = Mozilla / 4.0 (uyumlu; MSIE 6.0; Windows NT 5.1; SV1; MyIE2; Maxthon)

HTTP_HOST

içerir Alan adı Komut dosyasının çalıştırıldığı web sunucusu. Bu değişken, örneğin belirli bir sunucuya bağlanmamak için Konum başlığında gerekli olan tam yolu oluşturmak için yeterince uygundur.

HTTP_HOST = www.spravkaweb.ru

HTTP_FROM

Adres E-posta isteği yapan kullanıcı.

SUNUCU ADI

Sunucunun etki alanı adı veya IP adresi.

SUNUCU_NAME = www.spravkaweb.ru

SERVER_SOFTWARE

İstemcinin isteğine yanıt veren sunucu programının adı ve sürümü.

SUNUCU PORTU

Bu değişken, kullanıcının tarayıcısı tarafından erişilen sunucu bağlantı noktasını içerir. Genellikle 80'dir. Değişken, Konum başlığı parametresini oluşturmak için de kullanılabilir.

SERVER_PROTOCOL

Değişken, istek için kullanılan bilgi protokolünün adını ve sürümünü içerir.

SERVER_PROTOCOL = HTTP / 1.1

REMOTE_ADDR

Bu değişken, tarayıcının başlatıldığı kullanıcının düğümünün IP adresini (veya alan adını) içerir.

REMOTE_PORT

Bir sunucu yanıtı almak için kullanıcının tarayıcısına atanan bir bağlantı noktası.

REMOTE_USER

Talepte bulunan kullanıcının kimlik adı.

SCRIPT_NAME

Bu betiği içeren dosyanın adını içerir. Bu değişken, kendine yönlendirme yaparken (kendi kendine yönlendirme) Location başlığını oluştururken ve ayrıca etiketin action niteliğinin değerini değiştirmek için kullanışlıdır.

parametre olmadan başlatıldığında komut dosyasının çağırdığı sayfada (belirli bir komut dosyası adına bağlanmamak için).

DOKÜMAN KAYNAĞI

Web belge ağacının kök dizini.

REQUEST_METHOD

Kullanıcının veri aktarırken kullandığı yöntem. İyi yazılmış bir komut dosyasının, bu değişken temelinde, kullanıcının hangi yöntemi kullanacağını ve ilgili kaynaktan veri alacağını kendisinin belirlemesi ve aktarımın, örneğin yalnızca, yalnızca gerçekleştirileceğini varsaymaması gerektiğine dikkat edilmelidir. POST yöntemiyle.

QUERY_STRING

URL'de soru işaretinden sonra belirtilen parametreleri içerir. Hem GET yöntemiyle hem de POST yöntemiyle kullanılabildiklerini hatırlayın (ikinci durumda, içinde tanımlanmışlarsa). eylem özelliği etiket ).

PATH_INFO

içerir Ek bilgi yol hakkında.

PATH_TRANSLATED

Değişkendekiyle aynı bilgiler PATH_INFO Web belgeleri ağacının kök dizinine giden yolu belirten bir önek ile.

İÇERİK TÜRÜ

Ortam türü istek verileri.

İÇERİK UZUNLUĞU

Kullanıcı tarafından gönderilen verilerin bayt sayısını döndürür. Bir POST formunu kabul ediyor ve işliyorsanız, bu değişkenin ayrıştırılması gerekir.

GATEWAY_INTERFACE

Sunucunun kullandığı CGI sürümü.

Ortam değişkenlerini kullanma örneği

Değişkenler

PHP'de değişkenler dolar işaretiyle başlar ( $ ). Bu karakterden sonra herhangi bir sayıda alfasayısal ve alt çizgi karakteri gelebilir, ancak ilk karakter bir sayı veya alt çizgi olamaz. PHP değişken isimlerinin anahtar kelimelerden farklı olarak büyük/küçük harf duyarlı olduğu da unutulmamalıdır.

PHP'de değişkenleri bildirirken, değişkenin türünü açıkça belirtmeniz gerekmez ve aynı değişken program boyunca farklı türlere sahip olabilir.

Değişken, kendisine bir değer atandığı anda başlatılır ve program yürütüldüğü sürece var olur. Yani bir web sayfası söz konusu olduğunda bu, istek tamamlanana kadar demektir.

Dış değişkenler

İstemcinin isteği web sunucusu tarafından ayrıştırıldıktan ve PHP makinesine gönderildikten sonra, PHP makinesi istekle ilgili verileri içeren ve yürütüldüğü her zaman mevcut olan bir dizi değişken ayarlar. PHP ilk alır Ortam Değişkenleri Sisteminiz ve PHP betik ortamında aynı isim ve değerlere sahip değişkenler oluşturur, böylece sunucu üzerinde bulunan betikler istemcinin sisteminin özelliklerine erişebilir. Bu değişkenler yerleştirilir ilişkisel dizi $ HTTP_ENV_VARS(Diziler hakkında daha fazla bilgi için Bölüm 4'e bakın).

Doğal olarak dizi değişkenleri $ HTTP_ENV_VARS sisteme bağlıdır (çünkü aslında Ortam Değişkenleri). env (Unix) veya set (Windows) komutunu kullanarak makineniz için ortam değişkenlerinin değerlerini görüntüleyebilirsiniz.

PHP daha sonra sorgu dizesini ayrıştırdığında oluşturulan bir grup GET değişkeni oluşturur. Sorgu dizesi bir değişkende saklanır $ QUERY_STRING ve aşağıdaki bilgileri temsil eder " ? "istenen URL'de. PHP, sorgu dizesini karakter karakter keser & üzerinde bireysel elemanlar ve ardından bu öğelerin her birini "=" işareti için arar. "=" işareti bulunursa, eşittir işaretinin solundaki karakterlerin adını taşıyan bir değişken oluşturulur. Aşağıdaki formu göz önünde bulundurun:

eylem = "http: //localhost/PHP/test.php" yöntem = " elde etmek"> HDD: tip = " Metin"isim =" HDD"/>
CD-ROM: tip = " Metin"isim =" CD-ROM"/>
tip = " Sunmak"/>

Örneğin bu formda HDD satırına "Maxtor" ve CDROM satırına "Nec" yazarsanız, aşağıdaki talep formunu oluşturacaktır:

http: //localhost/PHP/test.php?HDD = Maxtor ve CDROM = Nec

Bizim durumumuzda PHP aşağıdaki değişkenleri yaratacaktır: $ HDD= "Maxtor" ve $ CDROM'u= "Nec".

Bu değişkenlerle normal değişkenlerde olduğu gibi komut dosyanızdan (test.php'ye sahibiz) çalışabilirsiniz. Bizim durumumuzda, sadece ekranda görüntülenirler:

Eko("

HDD $ HDD'dir

"); Eko("

CDROM $ CDROM'dur

"); ?>

POST yöntemi kullanılarak bir sayfa isteği yapılırsa, yine yorumlanan ve bir diziye yerleştirilen bir grup POST değişkeni görünür. $ HTTP_POST_VARS.

Komut dosyasını başlatmadan hemen önce, sunucu bazı ortam değişkenlerini bilgi ile birlikte iletir. Bazı değişkenler bazı başlıklar içerir, ancak hepsini içermez (tüm başlıkları alamazsınız). Aşağıda en önemli ortam değişkenlerinin bir listesini sağlayacağım.

HTTP_ACCEPT

Bu değişken hepsini listeler MIME veri türleri tarayıcı tarafından algılanabilir. * / * satırı, tarayıcının herhangi bir türü anladığı anlamına gelir.

HTTP_ACCEPT = resim / gif, resim / x-xbitmap, resim / jpeg, resim / pjpeg, uygulama / x-shockwave-flash, uygulama / vnd.ms-excel, uygulama / msword, * / *

HTTP_REFERER

Bu değişken, kullanıcının verilen sayfaya geldiği sayfa hakkındaki bilgileri temsil eder. Bu değişkeni örneğin bir kullanıcının sitenizdeki hareketini izlemek ve ardından en popüler rotaları görüntülemek için kullanabilirsiniz.

HTTP_REFERER = http: //www.site/php/pril/

HTTP_COOKIE

Bu değişken, tüm URL kodlu tanımlama bilgilerini saklar.

HTTP_COOKIE = sıcak günlüğü = 1; ZDEDebuggerPresent = php, phtml, php3; b = b; PHPSESSID =

HTTP_USER_AGENT

Kullanıcının tarayıcısını tanımlar. Tarayıcı türünü belirlemek için, bu dizede sözcüklerin olup olmadığını kontrol etmeniz gerekir: tarayıcı Internet Explorer ise, o zaman MSIE alt dizisi mevcut olacaktır ve yalnızca Mozilla sözcüğü varsa, o zaman Netscape'dir.

Örneğin:

HTTP_USER_AGENT = Mozilla / 4.0 (uyumlu; MSIE 6.0; Windows NT 5.1; SV1; MyIE2; Maxthon)

HTTP_HOST

Komut dosyasının çalıştırıldığı Web sunucusunun etki alanı adını içerir. Bu değişken, örneğin belirli bir sunucuya bağlanmamak için Konum başlığında gerekli olan tam yolu oluşturmak için yeterince uygundur.

HTTP_HOST = www.site

HTTP_FROM

İsteği yapan kullanıcının e-posta adresi.

SUNUCU ADI

Sunucunun etki alanı adı veya IP adresi.

SUNUCU_NAME = www.site

SERVER_SOFTWARE

İstemcinin isteğine yanıt veren sunucu programının adı ve sürümü.

SUNUCU PORTU

Bu değişken, kullanıcının tarayıcısı tarafından erişilen sunucu bağlantı noktasını içerir. Genellikle 80'dir. Değişken, Konum başlığı parametresini oluşturmak için de kullanılabilir.

SUNUCU_PORT = 80

SERVER_PROTOCOL

Değişken, istek için kullanılan bilgi protokolünün adını ve sürümünü içerir.

SERVER_PROTOCOL = HTTP / 1.1

REMOTE_ADDR

Bu değişken, tarayıcının başlatıldığı kullanıcının düğümünün IP adresini (veya alan adını) içerir.

REMOTE_PORT

Bir sunucu yanıtı almak için kullanıcının tarayıcısına atanan bir bağlantı noktası.

REMOTE_USER

Talepte bulunan kullanıcının kimlik adı.

SCRIPT_NAME

Bu betiği içeren dosyanın adını içerir. Bu değişken, kendine yönlendirme yaparken (kendi kendine yönlendirme) Location başlığını oluştururken ve ayrıca etiketin action niteliğinin değerini değiştirmek için kullanışlıdır. parametre olmadan başlatıldığında komut dosyasının çağırdığı sayfada (belirli bir komut dosyası adına bağlanmamak için).

DOKÜMAN KAYNAĞI

Web belge ağacının kök dizini.

REQUEST_METHOD

Kullanıcının veri aktarırken kullandığı yöntem. İyi yazılmış bir komut dosyasının, bu değişken temelinde, kullanıcının hangi yöntemi kullanacağını ve ilgili kaynaktan veri alacağını kendisinin belirlemesi ve aktarımın, örneğin yalnızca, yalnızca gerçekleştirileceğini varsaymaması gerektiğine dikkat edilmelidir. POST yöntemiyle.

QUERY_STRING

URL'de soru işaretinden sonra belirtilen parametreleri içerir. Hem GET yöntemiyle hem de POST yöntemiyle kullanılabildiklerini hatırlayın (ikinci durumda, etiketin action özniteliğinde tanımlanmışlarsa). ).

PATH_INFO

Yol hakkında ek bilgiler içerir.

PATH_TRANSLATED

Değişkendekiyle aynı bilgiler PATH_INFO Web belgeleri ağacının kök dizinine giden yolu belirten bir önek ile.

İÇERİK TÜRÜ

Ortam türü istek verileri.

İÇERİK UZUNLUĞU

Kullanıcı tarafından gönderilen verilerin bayt sayısını döndürür. Bir POST formunu kabul ediyor ve işliyorsanız, bu değişkenin ayrıştırılması gerekir.

GATEWAY_INTERFACE

Sunucunun kullandığı CGI sürümü.

Ortam değişkenlerini kullanma örneği

Ortam Değişkenleri

Ortam Değişkenleri:


"; $ br = getenv (" HTTP_USER_AGENT "); if (strpos ($ br," MSIE ")! == false) echo" Internet Explorer'ınız var
"; else echo" Netscape veya diğerleri var.
"; echo" IP'niz: ".getenv (" REMOTE_ADDR ")."
"; echo" Tarayıcı satırındaki parametreler şunlardır: ".getenv (" QUERY_STRING ");?>

Bu, çalıştığı ortama bağlı olarak bir php hizmetinin yapılandırmasını uygulamak için kısa bir nasıl yapılır. Birisi daha zarif bir çözüm önerebilir veya ayrıntılı olarak düzeltebilirse sevinirim.

Ana fikir

Ortam değişkenleri kullanılarak yapılandırılabilen aynı ekosistem içinde hizmet, mikro hizmetler ve bağımlı uygulamaları çalıştırın.
Sorun
Bu makale "ortam değişkenlerini" çok fazla tekrar ediyor.
Kullanıma hazır php-fpm, global ortam değişkenlerini (getenv işlevi) yok sayarken, php cli bunları alabilir.
Arka plan
.env ile daha önce çalıştıysanız bu bölümü atlayabilirsiniz.

V ş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ıldı. Bu, proje deposunda şuna benzer çok sayıda yinelenen konfigürasyon oluşturur:
  • oturum.global.php
  • session.local.php.dist
  • session.unittest.php.dist
  • db.global.php
  • db.local.php.dist
  • db.unittest.php.dist
Bu kopyaların sürekli olarak birbirleriyle senkronize edilmesi gerekir. Ayrıca, kendi içlerinde belirli bir php mantığını saklarlar ve bu da yinelenen kod oluşturur.

Yani proje artık çevreyi de hesaba katıyor ama...

Geliştirme çalışan makinelerde yapılırken proje .env dosyasını okudu ve her şey çalıştı. Ancak test ortamını dağıttığımda, sistem ortamı değişkenlerini gerçek olarak ayarlarsanız php-fpm'nin bunları yok saydığı ortaya çıktı. Google ve StackOverflow'tan gelen çeşitli tarifler, iyi bilinen iki yöntemin kullanımının bir veya daha fazla otomasyonuna indirgenmiştir:

1. fastcgi_param SOMEENV testini kullanarak değişkenleri nginx'ten geçirmek;
2. php-fpm çalışan işlem havuzu yapılandırmasında değişkenleri env formatında ayarlama.

Hem birinci hem de ikinci seçenekler bazı özel durumlar için uygundur. Ancak "uygulamayı değil, ortamı yapılandır" paradigmasında düşünürseniz, bu tür yöntemlerin, örneğin .env dosyasını projeyle birlikte klasöre koymaktan çok daha zor olduğu ortaya çıkar. Ama sonuçta, bir orkestratör, bir CI sistemi veya sadece Sistem yöneticisi projenin detaylarını bilmek zorunda değil, zarif değil.

Önerilen çözüm
Web'den çeşitli tarifleri bir araya getirerek aşağıdaki çalışma çözümüne ulaştım.
Centos 7, PHP 5.6.14 altında test edilmiştir.

1. /etc/php.ini'yi açın - options_order = "GPCS"yi replace_order = "EGPCS" ile değiştirin # Bundan sonra PHP, global alana ortam değişkenleri ekleyecektir # http://php.net/manual/ru/ini.core .php # ini.variables-order 2. /etc/php-fpm.d/www.conf dosyasını açın, /etc/php-fpm.conf (içinde farklı sistemler farklı bir yerde olabilir, bu php-fpm için www-process havuzu yapılandırmasıdır. - Ekleyin (veya varsa değiştirin): clear_env = no # koşucular için global değişkenleri temizlemeyi devre dışı bırakın 3. / etc / ortamında gerekli ortam değişkenlerini ayarlayın (standart sözdizimi A = B) 4. ln -fs / etc / ortam / etc / sysconfig / php-fpm # şimdi php-fpm hizmetinin ortam değişkenlerinin yapılandırması yalnızca global yapılandırmaya bir bağlantı olacaktır 5.systemctl arka plan programı-yeniden yükleme && hizmeti php-fpm yeniden başlatma

Aynı sembolik bağlantı yaklaşımı teoride diğer hizmetlere de uygulanabilir.

Önerilen çözümün artıları:
- / etc / ortamında saklanan değişkenler mevcuttur farklı uygulamalar... Kabukta echo $ MYSQL_HOST veya php'de getenv ("MYSQL_HOST") çağırabilirsiniz.
- / etc / ortamında açıkça ayarlanmayan ortam değişkenleri php-fpm'ye gitmeyecektir. Bu, düzenleyicinin, hizmetin çalıştığı korumalı alan sisteminin dışından ortamı kontrol etmesine olanak tanır.

eksileri:
- Ne yazık ki, php-fpm'de nginx'e benzeterek yeniden yükleme için çalışan bir komut bulamadım, bu nedenle / etc / ortamını değiştirmeniz durumunda mutlaka yapın systemctl arka plan programı-yeniden yükleme && hizmet php-fpm yeniden başlatma.

Önemli: uygulamanız yalıtılmış bir ortamda (sunucu, sanal makine, kapsayıcı) çalışmıyorsa, ortam değişkenlerinin tanımı, global alandaki ad eşleşmeleri nedeniyle sistemdeki komşu hizmetleri tahmin edilemez şekilde etkileyebilir.