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.
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:
echo "Вы пришли из: ".getenv("HTTP_REFERER")."
"; $ 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
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.