Menu
Jest wolny
Zameldować się
główny  /  Rada / Zmienne środowiskowe PHP. Wszystko, co musisz wiedzieć o zmiennych środowiskowych w tłumaczeniu PHP

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

Na stronie, którą wywołuje skrypt podczas uruchamiania bez parametrów (aby nie być dołączony do określonej nazwy scenariusza).

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 gdy metoda GET, jak i metoda postu (jeśli w tym ostatnim przypadku zostały one zdefiniowane akcja atrybutu. Etykietka ).

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

W zmiennych RNR zaczynają się od znaku dolara ( $ ). Ten znak może śledzić dowolną liczbę znaków alfanumerycznych i znaków podkreślenia, ale pierwsza postać nie może być cyfrą ani podkreślającym. Należy również pamiętać, że nazwy zmiennych w RNR są wrażliwe na rejestr, w przeciwieństwie do słów kluczowych.

Gdy deklarowanie zmiennych w PNP nie jest konieczne, aby wyraźnie określić rodzaj zmiennej, a ta sama zmienna może mieć różne typy podczas programu.

Zmienna jest inicjowana w momencie przypisywania wartości i istnieje, aż program zostanie wykonany. Te. W przypadku strony internetowej oznacza to, że dopóki wniosek zostanie zakończony.

Zmienne zewnętrzne

Po przeanalizowaniu żądania klienta jest analizowane przez serwer WWW i przeniesiony do maszyny RNR, ta ostatnia ustawia wiele zmiennych, które zawierają dane dotyczące zapytania i są dostępne przez cały czas, który jest wykonywany. Pierwszy rnr bierze zmienne środowisko Twój system i tworzy zmienne z tymi samymi nazwami i wartościami otoczonymi skryptem RNR w kolejności dla scenariuszy znajdujących się na serwerze, następujące funkcje systemu klienta. Te zmienne są umieszczone array asociative. $ Http_env_vars. (Więcej o tablicach można znaleźć w rozdziale 4).

Naturalnie, zmienna tablica $ Http_env_vars. są zależne od systemistycznie (ponieważ w rzeczywistości jest zmienne środowisko). Wyświetl wartości zmiennych środowiskowych dla komputera, którego możesz korzystać z polecenia ENV (UNIX).

Następnie RNR tworzy grupę Uzyskania zmiennych, które są tworzone podczas analizy ciągu zapytań. Ciąg zapytania jest przechowywany w zmiennej $ Query_String. i reprezentuje informacje po symbolu " ? "W żądanym adresie URL. RNR łamie wiersz zapytania przez symbole & na oddzielne elementyA następnie wyszukuje znak "\u003d" w każdym z tych elementów. Jeśli znaleziono znak "\u003d", zmienna jest tworzona z nazwą z symboli po lewej stronie znaku równości. Rozważ następujący formularz:

Akcja \u003d. "http: //localhost/php/test.php" Metoda \u003d " otrzymać."\u003e HDD: Typ \u003d " tEKST."Imię \u003d" HDD."/>
CDROM: Typ \u003d " tEKST."Imię \u003d" Cdrom."/>
Typ \u003d " zatwierdź"/>

Jeśli jesteś w tym formularzu w linii HDD, kliknij na przykład "Maxtor", aw ciągu CDROM ciąg "NEC", wygeneruje następujący formularz żądania:

http: //localhost/php/test.php? HDD \u003d maxtor & cdrom \u003d nec

W naszym przypadku PNP utworzy następujące zmienne: $ HDD. \u003d "Maxtor" i $ CDROM. \u003d "NEC".

Możesz pracować z tymi zmiennymi ze skryptu (od nas - test.php) jak w przypadku konwencjonalnych zmiennych. W naszym przypadku są one po prostu wyświetlane:

echo.("

HDD to $ HDD

"); echo.("

Cdrom to $ CDROM

"); ?>

Jeśli żądanie strony jest wykonywane za pomocą metody post, pojawi się grupa zmiennych pocztowych, które są również interpretowane i umieszczane w tablicy. $ Http_post_vars..

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

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 przeglądarki Internet Explorer, a następnie podłoże MSIE będzie obecne, a jeśli dostępne jest tylko słowo mozilla, jest to 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 nazwę domeny serwera WWW, na którym rozpoczyna się 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.syt.

Http_from.

Adres e-mail, wysyłając żądanie.

Nazwa serwera.

Nazwa domeny lub adres IP serwera.

Server_name \u003d www.syt.

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

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 Na stronie, którą wywołuje skrypt podczas uruchamiania bez parametrów (aby nie być dołączony do określonej nazwy scenariusza).

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 środowisko

Zmienne surround:


"$ 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.
Duplikaty muszą stale synchronizować się nawzajem. Ponadto przechowują pewną logikę PHP w sobie, co generuje duplikację kodu.

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.