Php-ympäristömuuttujat. CGI-ympäristömuuttujat. HTTP-pyyntökenttämuuttujat
Tämä on lyhyt opastus PHP-palvelun kokoonpanon toteuttamiseen, joka riippuu ympäristöstä, jossa se toimii. Olen iloinen, jos joku ehdottaa tyylikkäämpää ratkaisua tai korjaa pieniä asioita.
pääidea
Suorita palvelu, mikropalvelut ja niistä riippuvat sovellukset samassa ekosysteemissä ympäristömuuttujien avulla määritettynä.Ongelma
Tässä artikkelissa toistetaan "ympäristömuuttujat" liian monta kertaa.Valmis php-fpm jättää huomioimatta globaalit ympäristömuuttujat (getenv-funktio), kun taas php cli voi vastaanottaa ne.
Tausta
Voit ohittaa tämän osion, jos olet jo työskennellyt .env:n kanssa
Työskentelen tällä hetkellä ZF2:lla kirjoitetun projektin parissa. Projektin konfiguroimiseen käytettiin eri ympäristöjen asetustiedostoja. Tämä luo suuren määrän päällekkäisiä määrityksiä projektin arkistoon, jotain tällaista:
- session.global.php
- session.local.php.dist
- session.unittest.php.dist
- db.global.php
- db.local.php.dist
- db.unittest.php.dist
Joten projekti ottaa nyt ympäristön huomioon, mutta...
Kun kehitystyötä tehtiin työkoneilla, projekti luki .env-tiedoston ja kaikki toimi. Mutta kun otin käyttöön testiympäristön, kävi ilmi, että jos asetan todellisia järjestelmäympäristömuuttujia, php-fpm jättää ne huomiotta. Googlen ja StackOverflown erilaiset reseptit kiteytyvät kahden tunnetun menetelmän käytön automatisointiin:1. Muuttujien välittäminen nginx:n kautta käyttämällä fastcgi_param-parametria SOMEENV-testiä;
2. Muuttujien asettaminen env-muodossa php-fpm worker -prosessipoolikokoonpanossa.
Sekä ensimmäinen että toinen vaihtoehto ovat käteviä joissakin erityistilanteissa. Mutta jos ajattelee "ympäristön, ei sovelluksen konfigurointia", tällaiset menetelmät osoittautuvat paljon vaikeammiksi kuin esimerkiksi .env-tiedoston sijoittaminen projektikansioon. Mutta järjestäjän, CI-järjestelmän tai yksinkertaisesti järjestelmänvalvojan ei pitäisi tietää projektin toteutuksen yksityiskohtia, tämä ei ole tyylikästä.
Ehdotettu ratkaisu
Yhdistettyään erilaisia Internetin reseptejä, löysin seuraavan toimivan ratkaisun.Testattu alla Centos 7, PHP 5.6.14.
1. Avaa /etc/php.ini - Korvaa variables_order = "GPCS" muuttujalla_order = "EGPCS" # Tämän jälkeen PHP lisää ympäristömuuttujat globaaliin avaruuteen # http://php.net/manual/ru/ini. core.php #ini.variables-order 2. Avaa /etc/php-fpm.d/www.conf, jota ei pidä sekoittaa tiedostoon /etc/php-fpm.conf (voi sijaita eri paikoissa eri järjestelmissä, tämä on php-fpm:n www-prosessipoolin konfiguraatio - Lisää (tai vaihda, jos sinulla on): clear_env = no # poista globaalien muuttujien tyhjennys käynnistetyiltä työntekijöiltä 3. Aseta tarvittavat ympäristömuuttujat tiedostossa /etc/environment (vakiosyntaksi A=B ) 4. ln -fs / etc/environment /etc/sysconfig/php-fpm # nyt php-fpm palveluympäristömuuttuja config on yksinkertaisesti linkki globaaliin konfiguraatioon 5. systemctl daemon-reload && service php-fpm uudelleenkäynnistys
Sama lähestymistapa symlinkin kanssa pätee teoriassa muihin palveluihin.
Ehdotetun ratkaisun edut:
- Tiedostoon /etc/environment tallennetut muuttujat ovat käytettävissä eri sovelluksissa. Voit kutsua echoa $MYSQL_HOST shellissä tai getenv("MYSQL_HOST") php:ssä.
- Ympäristömuuttujat, joita ei ole erikseen asetettu tiedostoon /etc/environment, eivät päädy tiedostoon php-fpm. Tämä antaa orkestraattorille mahdollisuuden ohjata ympäristöä sen eristetyn järjestelmän ulkopuolelta, jossa palvelu on käynnissä.
Miinukset:
- Valitettavasti en löytänyt toimivaa uudelleenlatauskomentoa php-fpm:stä, samanlainen kuin nginx, joten jos muutat tiedostoa /etc/environment, sinun on tehtävä systemctl daemon-reload && service php-fpm käynnistyy uudelleen.
Tärkeä: Jos sovelluksesi ei toimi eristetyssä ympäristössä (palvelin, virtuaalikone, säilö), ympäristömuuttujien määrittäminen voi ennakoimattomasti vaikuttaa järjestelmän naapuripalveluihin globaalissa tilassa olevien nimien osumien vuoksi.
Huomio! Artikkeli on kirjoitettu Windows 7 -käyttöjärjestelmässä, mutta PHP:n lisäämisessä ympäristömuuttujiin muissa versioissa (Windows XP, Windows Vista, Windows 8, ...) ei ole perustavanlaatuisia eroja.
Tiedot! Kaikki asetusten polut näytetään sen perusteella, että Denwer on asennettu D:/web-kansioon. Kun käytät artikkelin tietoja, älä unohda muuttaa tätä polkua omaksi.
Jotta voit käyttää PHP:tä mukavasti Windows-konsolissa, sinun on määritettävä ympäristömuuttujat. Muussa tapauksessa, kun työskentelet PHP:n kanssa konsolin kautta, sinun on kirjoitettava php.exe-tiedoston koko polku php-komennon sijaan.
Oletetaan, että Denwer on asennettu D:/web-kansioon.
Napsauta hiiren kakkospainikkeella "Tietokone" -kuvaketta Ominaisuudet:
Järjestelmän lisäparametrit:
"Lisäasetukset"-välilehti, "Ympäristöasetukset..." -painike:
Järjestelmäasetukset-ryhmässä, korosta Polku-muuttuja ja napsauta Muokkaa-painiketta:
Lisää rivi D:\web\usr\local\php5; ja napsauta "OK":
Käynnistä Denwer uudelleen. Nyt voit avata konsolin (Win + R ja kirjoittaa cmd) ja tarkistaa PHP:n toiminnan, kirjoittaa komennon:
Korjaa nämä virheet avaamalla tiedosto D:/web/usr/local/php5/php.ini. Etsi muuttujat extension_dir, zend_extension, session.save_path ja aseta ne seuraaviin arvoihin.
Välittömästi ennen komentosarjan käynnistämistä palvelin välittää sille joitakin ympäristömuuttujia tiedoineen. Tietyt muuttujat sisältävät joitakin otsikoita, mutta eivät kaikkia (et voi saada kaikkia otsikoita).
HTTP_ACCEPT- Tämä muuttuja luettelee kaikki MIME-tietotyypit, jotka selain voi hyväksyä. Rivi */* tarkoittaa, että selain ymmärtää minkä tahansa tyypin.
HTTP_ACCEPT= */*
HTTP_REFERER- Tämä muuttuja edustaa tietoa sivusta, jolta käyttäjä tuli tälle sivulle. Tämän muuttujan avulla voit esimerkiksi seurata käyttäjän liikkumista sivustollasi ja tarkastella sitten suosituimpia reittejä.
HTTP_REFERER= http://www.spravkaweb.ru/
HTTP_COOKIE- Tämä muuttuja tallentaa kaikki URL-koodatut evästeet.
HTTP_COOKIE=
HTTP_USER_AGENT- Tunnistaa käyttäjän selaimen. Selaimen tyypin määrittämiseksi sinun on tarkistettava tämä rivi sanojen esiintymisen varalta: jos selain on Internet Explorer, MSIE-alimerkkijono on läsnä, ja jos vain sana Mozilla on läsnä, tämä on Netscape.
HTTP_USER_AGENT= Mozilla/4.0 (yhteensopiva; MSIE 5.0; Windows NT 4.0)
Sinulla on Internet Explorer
HTTP_HOST- Sisältää sen Web-palvelimen toimialueen nimen, jossa komentosarja suoritettiin. Tämä muuttuja on varsin kätevä käyttää esimerkiksi koko polun luomiseen, joka vaaditaan Location-otsikossa, jotta se ei ole sidottu tiettyyn palvelimeen.
HTTP_HOST= www.spravkaweb.ru
HTTP_FROM- Pyynnön lähettäneen käyttäjän sähköpostiosoite.
HTTP_FROM=
PALVELIMEN NIMI- Verkkotunnuksen nimi tai palvelimen IP-osoite.
SERVER_NAME= www.spravkaweb.ru
SERVER_SOFTWARE- Asiakaspyyntöön vastaavan palvelinohjelman nimi ja versio.
SERVER_SOFTWARE= Apache/1.3.33 (Unix) mod_jk/1.2.8 mod_auth_passthrough/1.8 mod_log_bytes/1.2mod_bwlimited/1.4 FrontPage/5.0.2.2635 mod_ssl/2.8.22 OpenSSL/0.9.7a. PHP-bGI
PALVELIMEN PORTTI- Tämä muuttuja sisältää palvelinportin, jota käyttäjän selain käytti. Tyypillisesti tämä on 80. Muuttujaa voidaan käyttää myös Location header -parametrin muodostamiseen.
SERVER_PORT= 80
SERVER_PROTOCOL- Muuttuja sisältää pyynnössä käytetyn tietoprotokollan nimen ja version.
SERVER_PROTOCOL= HTTP/1.0
REMOTE_ADDR- Tämä muuttuja sisältää sen käyttäjän isännän IP-osoitteen (tai verkkotunnuksen nimen), jossa selain käynnistettiin.
REMOTE_ADDR= 212.94.114.177
REMOTE_PORT- Portti, joka on määritetty käyttäjän selaimelle vastaanottamaan palvelinvastauksen.
REMOTE_PORT= 4277
REMOTE_USER- Pyynnön lähettäneen käyttäjän tunnistenimi.
REMOTE_USER=
SCRIPT_NAME- Sisältää tämän skriptin sisältävän tiedoston nimen. Tätä muuttujaa on kätevä käyttää muodostettaessa Location-otsikkoa uudelleenohjattaessa itsellesi (self-redirect) sekä korvaamaan tunnisteen action-attribuutin arvo