Zmienne środowiskowe PHP. Wszystko, co musisz wiedzieć o zmiennych środowiskowych w tłumaczeniu PHP
Uwaga! Artykuł jest napisany w ramach Windows 7, ale podstawowych różnic w dodaniu PHP zmienne środowiska W innych wersjach (okno XP, Windows Vista, Windows 8, ...) Nie.
Informacja! Wszystkie ścieżki w ustawieniach zostaną wskazane na podstawie faktu, że DenWer jest zainstalowany w folderze D: / Web. Podczas korzystania z danych z artykułu nie zapomnij zmienić tej ścieżki do Twojego.
Dla wygody użyj PHP. W konsoli Windows musisz skonfigurować zmienne środowiskowe. W przeciwnym razie podczas pracy z PHP przez konsolę, zamiast komendy PHP, będziesz musiał napisać pełną ścieżkę do pliku php.exe.
Załóżmy, że Denwer jest zainstalowany w folderze D: / Web.
Z prawym przyciskiem myszy na ikonie komputera, właściwości:
Dodatkowe parametry systemu:
Zakładka "Zaawansowana", przycisk "Środowe parametry":
Grupa " Parametry systemu."Wybierz zmienną ścieżką i kliknij przycisk Edytuj:
Dodaj łańcuch D: Web usr lokalny PHP5; i kliknij "OK":
Uruchom ponownie Denwer. Teraz możesz otworzyć konsolę (Win + R i wprowadź CMD) i sprawdź praca PHP. Wprowadź polecenie:
Aby poprawić te błędy, otwórz plik D: /Web/usr/local/php5/php.ini. Znajdź zmienne Extension_dir, Zend_extension, session.save_path i ustaw następujące wartości dla nich.
Zmienne środowisko
Zmienne środowiskowe w PHP
Natychmiast przed rozpoczęciem scenariusza serwer przekazuje go niektóre zmienne środowiskowe z informacjami. W pewnych zmiennych zawierają niektóre nagłówki, ale nie wszystkie (niemożliwe jest uzyskanie wszystkich nagłówków). Następnie podam listę najważniejszych zmiennych środowiskowych.
Http_accept.
W tej zmiennej wymieniono wszystkie Mime typy danychktóry może być postrzegany przez przeglądarkę. Wiersz * / * oznacza, że \u200b\u200bprzeglądarka rozumie dowolny typ.
Http_accept \u003d obraz / gif, obraz / x-xbitmap, obraz / jpeg, obraz / pjpeg, aplikacja / x-shockwave-flash, aplikacja / vnd.ms-excel, aplikacja / msword, * / *
Http_referer.
Ta zmienna reprezentuje informacje o stronie, z którą przyszedł użytkownik. Ta zmienna może być używana na przykład, aby śledzić ruch użytkownika zgodnie z witryną, a następnie wyświetlić najpopularniejsze trasy.
Http_referer \u003d http://www.spravkaweb.ru/php/pril/
Http_cookie.
Wszystkie pliki cookie są przechowywane w tej zmiennej w kodowaniu URL.
Http_cookie \u003d hotlog \u003d 1; ZdedeggerPresent \u003d PHP, PHTML, PHP3; b \u003d b; Phpsesid \u003d 16805922A9258CDA274316E60f649CF8.
Http_user_agent.
Identyfikuje przeglądarkę użytkownika. Aby utworzyć typ przeglądarki, musisz sprawdzić ten ciąg do obecności słów: jeśli przeglądarka jest Internet Explorer.Substerstwo MSIE będzie obecne, a jeśli tylko słowo Mozilla jest dostępna, to jest netscape.
Na przykład:
Http_user_agent \u003d mozilla / 4.0 (kompatybilny; MSIE 6.0; Windows NT 5.1; SV1; Myie2; Maxthon)
Http_host.
Zawiera nazwa domeny Serwer internetowy, na którym się rozpoczyna skrypt. Ta zmienna jest wystarczająco wygodna, na przykład, aby wygenerować pełną ścieżkę wymaganą w nagłówku lokalizacji, aby nie być dołączony do określonego serwera.
Http_host \u003d www.spravkaweb.ru.
Http_from.
Adres e-mail Użytkownik, który wysłał prośbę.
Nazwa serwera.
Nazwa domeny lub adres IP serwera.
Serwer_name \u003d www.spravkaweb.ru.
Server_software.
Nazwa i wersja programu serwera odpowiadająca żądaniu klienta.
Port serwera.
Ta zmienna zawiera port serwera, do którego adresista przez użytkownika adresowany. Jest to zwykle 80. Zmienna może być również używana do wygenerowania parametru nagłówka lokalizacji.
Server_protocol.
Zmienna zawiera nazwę i wersję protokołu informacyjnego, który został użyty do żądania.
Server_protocol \u003d http / 1.1
Remote_addr.
Ta zmienna zawiera adres IP (lub nazwę domeny) węzła użytkownika, na którym została uruchomiona przeglądarka.
Remote_port.
Port, który jest zabezpieczony przez przeglądarkę użytkownika, aby otrzymać odpowiedź serwera.
Remote_user.
Identyfikacja nazwy użytkownika Wysyłanie żądania.
Script_name.
Zawiera nazwę pliku zawierającego ten skrypt. Ta zmienna jest wygodna w użyciu, gdy nagłówek lokalizacji jest generowany przy przekierowaniu (samokrezerwuj), a także zastępować wartość atrybutu tagu akcji
Dokument_root.
Katalog korzenia drzewa dokumentu internetowego.
Prośba_metod.
Metoda, którą użytkownik ma zastosowanie podczas transmisji danych. Należy zauważyć, że kompetentny scenariusz musi określić na podstawie tej zmiennej, która metoda użyje użytkownika i odbierać dane z odpowiedniego źródła, a nie do obliczenia, że \u200b\u200btransfer zostanie przeprowadzony, na przykład tylko pocztą metoda.
Query_string.
Zawiera parametry, które w adresie URL są wskazane po znaku zapytania. Przypomnijmy, że są one dostępne zarówno z metodą GET, jak i po metodzie pocztowej (jeśli w tym drugim przypadku zostały one zdefiniowane w atrybucie tagu akcji
Path_info.
Zawiera dodatkowe informacje o ścieżce.
PATH_TRANSLATED.
Te same informacje, co w zmiennej Path_info. Dzięki prefiksie ustawia ścieżkę do katalogu głównego drzewa dokumentu internetowego.
Typ zawartości.
Dane o żądanie nośnika.
Content_Length.
Zwraca liczbę bajtów danych wysyłanych przez użytkownika. Ta zmienna musi być analizowana, jeśli jesteś zaangażowany w recepcję i przetwarzanie post-formy.
Gateway_Interface.
Wersja CGI wykorzystuje serwer.
Przykład używania zmiennych środowiskowych
Zmienne surround:
echo "Вы пришли из: ".getenv("HTTP_REFERER")."
"$ br \u003d getenv (" http_user_agent "); jeśli (strpos ($ br," msie ")! \u003d\u003d false) echo" Masz program Internet Explorer
"; Inaczej echo" masz Netscape lub innych.
"; Echo" Twój IP: ".getenv (" Remote_addr ")."
"; Echo" Oto parametry w linii przeglądarki: ".getenv (" Query_String ");
Jest to krótki sposób, aby wdrożyć konfigurację usługi PHP, w zależności od środowiska, w którym działa. Cieszę się, jeśli ktoś opowiada bardziej eleganckie rozwiązanie lub koryguje się w trasach.
Główny pomysł
Uruchom usługę, mikrovices i afiliaty w jednym ekosystemie konfigurowalnym przy użyciu zmiennych środowiskowych.Problem
W tym artykule "zmienne środowiskowe" jest powtarzane zbyt wiele razy.Z pola PHP-FPM ignoruje globalne zmienne środowiskowe (funkcja Getenv), podczas gdy PHP CLI może je odbierać.
Pre-historia.
Ta sekcja może być pominięta, jeśli już pracowałeś z S.NV
W ten moment Pracuję nad projektem napisanym w ZF2. Pliki konfiguracyjne dla różnych środowisk wykorzystano do skonfigurowania projektu. Generuje to dużą liczbę duplikatów konfiguracji w repozytorium projektu w przybliżeniu tego typu:
- session.global.php.
- session.local.php.dist.
- session.unittest.php.dist.
- db.global.php.
- db.local.php.dist.
- db.Unittest.php.dist.
Tak więc projekt bierze teraz pod uwagę środowisko, ale ...
Podczas gdy rozwój został przeprowadzony na maszynach roboczych, read projektu. TENV plik i wszystko działało. Ale kiedy rozwinęłem środowisko testowe, okazało się, że jeśli zadasz stałe zmienne środowiskowe, PHP-FPM ignoruje je. Różne przepisy z Google i Stackoverflow zostały zredukowane do jednej lub innej automatyzacji użycia dwóch znanych metod:1. Przeniesienie zmiennych za pośrednictwem parametru Nginx FastCgi_param SomeNV;
2. Instalacja zmiennych w formacie Env w konfiguracji puli przepływu pracy PHP-FPM.
Zarówno pierwsza, jak i druga opcja są wygodne dla niektórych specjalnych sytuacji. Ale jeśli myślisz w Paradygmcie "Skonfiguruj środę, a nie aplikację", to takie metody okazują się znacznie trudniejsze niż na przykład, wystarczy umieścić plik.ENV do folderu z projektem. Ale w końcu orkiestrator, system CI lub po prostu administrator systemu Nie powinienem znać szczegółów realizacji projektu, to nie jest elegancki.
Proponowane rozwiązanie rozwiązania
Łącząc różne przepisy z sieci, sprzedałem następujące rozwiązanie robocze.Testowany pod Centos 7 PHP 5.6.14.
1. Otwórz /etc/php.ini - Wymień zmienne_order \u003d "GPCS" na Variate_order \u003d "EGPCS" # Potem, PHP doda do globalnych zmiennych środowiskowych przestrzeni # http://php.net/manual/eni.core. PHP # INI.VARIALES-rzędu 2. Open /etc/php-fpm.d/www.conf, nie należy mylić z /etc/php-fpm.conf (w różne systemy. Może w innym miejscu jest to konfiguracja www-puls procesów dla PHP-FPM. - Dodaj (lub wymień, jeśli wystąpi nagle): Clear_env \u003d Nie # Wyłącz czyszczenie zmiennych globalnych dla Uruchomionych Warkers 3. Ustaw niezbędne zmienne środowiskowe do / etc / Environment (standardowa składnia A \u003d B) 4. LN - FS / etc / Environment / Etc / Sysconfig / PHP-FPM # Teraz konfiguruj czarujące zmienne PHP-FPM Usługa będzie tylko link do Global Config 5. SystemCTL Daemon-Reload & & Service PHP-FPM Restart
To samo podejście z SimLink, w teorii, mających zastosowanie do innych usług.
Plusy proponowanego rozwiązania:
- Zmienne przechowywane w /tp / środowisku Dostępne wiele zastosowań. Możesz zadzwonić do echa $ mysql_host w skorupce lub getenv ("mysql_host") w PHP.
- Zmienne środowiska, które są wyraźnie nie określone w / etc / środowisku, nie spadną do PHP-FPM. Pozwala to za pomocą orkiestratora monitorowania otoczenia izolowanego systemu, w którym działa usługa.
Minuses:
- Niestety, PHP-FPM, nie znalazłem polecenia roboczego do przeładowania przez analogię z Nginx, więc w przypadku zmiany / etc / środowiska, musisz to zrobić systemCtl Daemon-Reload & & Service PHP-FPM Restart.
Ważny: Jeśli Twoja aplikacja nie działa w izolowanym środowisku (serwer, wirtualny, kontenerowy), definicja zmiennych środowiskowych może nieprzewidywalnie wpływać na sąsiednie usługi w systemie ze względu na obciążenia nazwisk w globalnej przestrzeni.