Hogyan telepíthetünk újabb PHP verziókat Debian 9 (Stretch) LAMP szerverünkre PHP-FPM módban (2. oldal)

botond küldte be 2019. 09. 28., szo – 23:40 időpontban

Tartalom

  1. oldal: A sury.org csomagtár beüzemelése és a különböző PHP verziók telepítése
  2. oldal: Különböző PHP-FPM verziók kombinált használata egy szerveren

 

A 2. oldal tartalma

 

Folytatás

A leírás első oldalán hozzáadtuk rendszerünk csomagkezelőjéhez a deb.sury.org csomagtárat, amiből feltelepítettük az összes rendelkezésre álló PHP verziót. Ezen az oldalon pedig működésre bírjuk a teszt szerveren ezeket a PHP változatokat, amelyek párhuzamosan, de egymástól függetlenül futtatják weboldalaink PHP kódjait.

 

 

Alapvető beállítások

Először gyorsan elvégezzük azokat a szükséges beállításokat, amelyek segítségével PHP-FPM-en keresztül tudjuk működtetni a weboldalakat. Első körben beállítjuk az Apache-ot.

Apache beállítása

Kapcsoljuk be a PHP-k telepítésekor is javasolt Apache modulokat, majd indítsuk újra az Apache-ot:

a2enmod proxy_fcgi setenvif
systemctl restart apache2

Egy korábbi leírásban már állítottunk be PHP-FPM-et Debian 8 LAMP rendszeren, most is hasonló feladatokat fogunk elvégezni, annyi különbséggel, hogy itt többféle PHP-FPM verzióval lesz dolgunk.

 

Egyszerű használat: egyféle PHP-FPM verzió használata

Ha már itt járunk, akkor megnézzük az egyszerű használati módot is, ahol csak be kell kapcsolnunk a megfelelő PHP verziójú FPM-et (globális PHP-FPM használat).

A feladat

Tegyük fel, hogy a szerveren egy, vagy több weboldalt szeretnénk működtetni, de elegendő számunkra csak az egyik PHP verzió használata – a korábban feltelepítettek közül –, és nem számít, hogy mindegyik weboldal php kódjai ugyanannak a  (www-data) felhasználónak a nevében kerülnek futtatásra, mert például egy tulajdonban vannak a  weboldalak, így nincs biztonsági kockázat. Ez a PHP verzió legyen mondjuk a 7.3-as, ami a jelenlegi legújabb aktív kiadású ág.

A megoldás

Ha egyszerre csak egy PHP-FPM verziót szeretnénk használni, akkor egyszerű dolgunk van: csak be kell kapcsolni a megfelelő PHP változat FPM konfigurációját. Ezeket itt találhatjuk:

ls -al /etc/apache2/conf-available

Ebben a könyvtárban találhatjuk a rendelkezésre álló Apache konfigurációkat, amik közül most a phpx.y-fpm.conf -okkal foglalkozunk:

php5.6-fpm.conf
php7.0-fpm.conf
php7.1-fpm.conf
php7.2-fpm.conf
php7.3-fpm.conf
php7.4-fpm.conf

Nézzünk bele valamelyikbe, mondjuk:

nano php7.3-fpm.conf
# Redirect to local php-fpm if mod_php is not available
<IfModule !mod_php7.c>
<IfModule proxy_fcgi_module>
    # Enable http authorization headers
    <IfModule setenvif_module>
    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
    </IfModule>

    <FilesMatch ".+\.ph(ar|p|tml)$">
        SetHandler "proxy:unix:/run/php/php7.3-fpm.sock|fcgi://localhost"
    </FilesMatch>
    <FilesMatch ".+\.phps$">
        # Deny access to raw php sources by default
        # To re-enable it's recommended to enable access to the files
        # only in specific virtual host or directory
        Require all denied
    </FilesMatch>
    # Deny access to files without filename (e.g. '.php')
    <FilesMatch "^\.ph(ar|p|ps|tml)$">
        Require all denied
    </FilesMatch>
</IfModule>
</IfModule>

Itt egy megjegyzéssel kezdődik, amiben leírja, hogy ez a konfig egy átirányítást végez, amennyiben nem elérhető a rendszerben mod_php. A konfig második sorában pedig egy feltétel gondoskodik erről, ami csak akkor engedi lefutni az alatta lévő kódblokkot, ha a mod_php7 nem érhető el.

Ennek használatához tehát először ki kell kapcsolnunk a mod_php-t, ami innentől már nem lesz használható a szerveren. Ez nem is baj, mert a mod_php már nagyon elavult szerver API, amit ma már jobb, ha elkerülünk. Kapcsoljuk tehát ki:

a2dismod php7.0
Itt a különböző Debian verzióknál eltérő modult kell kikapcsolnunk, így például a Debian 9-nél a "php7.0"-át, Debian 10-nél a "php7.3"-at, Debian 8-nál pedig a "php5" nevűt.

Ezután kapcsoljuk be a fenti php7.3-as konfigot:

a2enconf php7.3-fpm

Majd Indítsuk újra az Apache-ot:

systemctl reload apache2

Az eddigieket persze le lehetett volna írni 3 parancssorban is, amiben ki-bekapcsolgatjuk az elemeket, de én hiszek abban, hogy ha a dolgok mögé nézünk, akkor az összefüggéseket látva sokkal könnyebben megérthetjük a rendszer működését, valamint hamarabb megjegyezzük ezeknek a beállításoknak a menetét, és a miértjét. Másodsorban pedig a fentebb megnyitott konfig fájl is jól fog még később jönni a különböző részeinek felhasználása miatt.

Ezután hozzunk létre egy phpinfo-t lekérdező fájlt:

/var/www/html/phpinfo.php

Majd tegyük bele a következőket:

<?php
    phpinfo();
?>

Végül töltsük be a böngészőbe vagy a szerver IP-címével, vagy ha van ráirányított domain nevünk pl. a hosts fájlunkban, akkor azzal:

PHP teszt - Verzió és PHP-FPM szerver API

Itt láthatjuk elsősorban a működő PHP környezetünk 7.3-as verzióját, valamint, hogy PHP-FPM-el fut az oldal. Lejjebb görgetve pedig látjuk az oldalt futtató Linux felhasználót is:

PHP teszt - Oldalt futtató felhasználó

ami jelen esetben a www-data.

Így tehát ha létrehozunk több weboldalt, aminek nem teszünk a virtualhoszt-jaiba különösebben egyedi beállításokat, akkor mindegyik oldal ugyanezzel a PHP környezettel fog elindulni.

 

 

Több weboldal működtetése külön PHP verziókkal

Ebben a részben több weboldalt működtetünk különböző PHP verziójú környezettel és külön felhasználókkal, így az oldalak teljesen elszeparáltak, nem jelentenek egymásra biztonsági kockázatot.

A feladat

Tételezzük fel, hogy – az eddigi beállításainkat megtartva – szükségünk van két további weboldalra, ahol az egyik egy öreg weboldal, ami régi PHP kódokat tartalmaz, így csak a PHP 5-ös verziójával tud működni. Ennek a neve legyen oregweboldal.local. És kell egy másik webhely is, ahol pedig egy másik weboldalunk PHP 7.x-es kódjait szeretnénk az új, 7.4-es PHP rendszerrel kompatibilissé tenni, és ehhez kell egy PHP 7.4-el rendelkező tesztkörnyezet. Ennek a neve pedig legyen kiserletioldal.local. Mindkét weboldalnak PHP-FPM-el és saját felhasználókkal kell futnia úgy, hogy az eddig beállított alapértelmezett 7.3-as PHP rendszerünk továbbra is működőképes maradjon a jelenlegi webgyökerében.

Természetesen mindegyik feltelepített PHP rendszer számára létrehozhatunk külön weboldalakat, csak feleslegesen nem szeretném hosszúra nyújtani a leírást a sok hasonló beállítás elvégzésével, valamint ezzel az életszerű felállással is jól szemléltethető a különböző PHP generációk egyidejű működtetése.

A megoldás

Felhasználók és a webgyökér könyvtárak létrehozása

Először hozzunk létre két felhasználót a weboldalak számára, amiknek a nevében fognak futni a PHP kódok:

adduser oregweboldal
adduser kiserletioldal

Mindkettőnek adjunk valamilyen jelszót, és válaszolgassunk a feltett kérdésekre (az egyszerűség kedvéért nyomkodjunk enter-eket ezekre a kérdésekre).

Ezután hozzuk létre az oldalak webgyökér könyvtárait, ami mondjuk megfelelő lesz a /var/www alatt is (ahol az eredeti  Apache virtualhosztunk is van a "html" könyvtárával):

mkdir /var/www/oregweboldal
mkdir /var/www/kiserletioldal

Így szépen elfér a három webgyökér egy főkönyvtárban. Most adjuk át ezeknek a könyvtáraknak a tulajdonjogait a két új felhasználónak:

chown oregweboldal:oregweboldal /var/www/oregweboldal/
chown kiserletioldal:kiserletioldal /var/www/kiserletioldal/

Ezek után most így néz ki a /var/www könyvtárunk:

drwxr-xr-x 2 root           root           4,0K jún   19 22:32 html
drwxr-xr-x 2 kiserletioldal kiserletioldal 4,0K szept 28 18:27 kiserletioldal
drwxr-xr-x 2 oregweboldal   oregweboldal   4,0K szept 28 18:27 oregweboldal

PHP-FPM pool-ok létrehozása

Hozzuk létre a weboldalak számára a megfelelő verziójú PHP-FPM pool-okat:

Öregweboldal

Ennek az oldalnak a aműködtetésére a PHP5-öt szántuk, így hát lépjünk be a PHP-FPM pool könyvtárába, majd készítsünk egy másolatot az alapértelmezett www pool-ról, és nyissuk meg szerkesztésre:

cd /etc/php/5.6/fpm/pool.d
cp www.conf oregweboldal.conf
nano oregweboldal.conf

A konfig fájlban állítsunk be pár dolgot az alábbiaknak megfelelően:

[oregweboldal]

[...]

user = oregweboldal
group = oregweboldal

[...]

listen = /run/php/php5.6-oregweboldal-fpm.sock

[...]

Az első beállítás a szögletes zárójelben tehát a pool-unk neve, majd a felhasználó és csoport beállítása után a listen sorában beállítjuk a leendő socket fájlunkat, ami a PHP-FPM újraindítása után fog létrejönni.

Itt más beállítással most nem foglalkozunk, mentsük le a fájlt, majd indítsuk újra a a PHP-FPM ezen verzióját, és egyúttal ellenőrizhetjük is:

systemctl restart php5.6-fpm
systemctl status php5.6-fpm

Itt látjuk, hogy a PHP5.6 FPM működik, és az alap www pool mellett bent van az újonnan létrehozott pool-unk is a maga 2 processzével:

 php5.6-fpm.service - The PHP 5.6 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php5.6-fpm.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2019-09-28 18:52:49 CEST; 26s ago
     Docs: man:php-fpm5.6(8)
 Main PID: 6260 (php-fpm5.6)
   Status: "Processes active: 0, idle: 4, Requests: 0, slow: 0, Traffic: 0req/sec"
    Tasks: 5 (limit: 4915)
   CGroup: /system.slice/php5.6-fpm.service
           ├─6260 php-fpm: master process (/etc/php/5.6/fpm/php-fpm.conf)
           ├─6261 php-fpm: pool oregweboldal
           ├─6262 php-fpm: pool oregweboldal
           ├─6263 php-fpm: pool www
           └─6264 php-fpm: pool www

szept 28 18:52:49 debian9 systemd[1]: Starting The PHP 5.6 FastCGI Process Manager...
szept 28 18:52:49 debian9 systemd[1]: Started The PHP 5.6 FastCGI Process Manager.

Innentől már hivatkozhatunk a listen sorában beállított socket fájlunkra majd az Apache virtualhosztunkban.

Kísérleti oldal

Ehhez az oldalhoz is végrehajtjuk ugyanezeket a lépéseket, csak itt a 7.4-es PHP-vel:

cd /etc/php/7.4/fpm/pool.d
cp www.conf kiserletioldal.conf
nano kiserletioldal.conf

Itt is állítsuk be a fentiekhez hasonlóan a megfelelő értékeket:

[kiserletioldal]

[...]

user = kiserletioldal
group = kiserletioldal

[...]

listen = /run/php/php7.4-kiserletioldal-fpm.sock

[...]

Mentsük le, majd indítsuk újra a megfelelő FPM-et, és ellenőrizhetjük is:

systemctl restart php7.4-fpm
systemctl status php7.4-fpm
 php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2019-09-28 19:09:37 CEST; 4s ago
     Docs: man:php-fpm7.4(8)
 Main PID: 6643 (php-fpm7.4)
   Status: "Ready to handle connections"
    Tasks: 5 (limit: 4915)
   CGroup: /system.slice/php7.4-fpm.service
           ├─6643 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
           ├─6644 php-fpm: pool kiserletioldal
           ├─6645 php-fpm: pool kiserletioldal
           ├─6646 php-fpm: pool www
           └─6647 php-fpm: pool www

szept 28 19:09:37 debian9 systemd[1]: Starting The PHP 7.4 FastCGI Process Manager...
szept 28 19:09:37 debian9 systemd[1]: Started The PHP 7.4 FastCGI Process Manager.

Itt is elindult szépen az új pool-unk.

 

 

Apache virtualhosztok létrehozása

Hogy a külvilág felől elérhetőek legyenek weboldalaink, létre kell hoznunk a virtualhosztokat. Korábban már készítettünk ilyet, most is hasonlóképpen hozzuk létre, így most itt nem megyünk bele a beállítások részleteibe.

Öregweboldal

Lépjünk be az Apache rendelkezésre álló weboldal konfigurációit tartalmazó könyvtárába:

cd /etc/apache2/sites-available

Majd hozzunk létre egy új fájlt az oregweboldal.local nevű oldalunk számára:

nano oregweboldal.local.conf

és tegyük bele az alábbi konfigurációt:

<VirtualHost *:80>
	ServerName oregweboldal.local
	ServerAlias www.oregweboldal.local

	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/oregweboldal

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

	<IfModule mod_proxy_fcgi.c>
		<Directory /var/www/oregweboldal>
			DirectoryIndex index.php index.html
			<FilesMatch "\.(php)$">
				SetHandler "proxy:unix:/run/php/php5.6-oregweboldal-fpm.sock|fcgi://localhost"
			</FilesMatch>		
		</Directory>
	</IfModule>
</VirtualHost>

Mentsük le, és engedélyezzük a weboldalt, majd indítsuk újra az Apache-ot:

a2ensite oregweboldal.local.conf
systemctl restart apache2
Kísérleti oldal

Itt is végezzük el ugyanezeket:

cd /etc/apache2/sites-available
nano kiserletioldal.local.conf

Tegyük bele itt is a megfelelő beállításokat:

<VirtualHost *:80>
	ServerName kiserletioldal.local
	ServerAlias www.kiserletioldal.local

	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/kiserletioldal

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

	<IfModule mod_proxy_fcgi.c>
		<Directory /var/www/kiserletioldal>
			DirectoryIndex index.php index.html
			<FilesMatch "\.(php)$">
				SetHandler "proxy:unix:/run/php/php7.4-kiserletioldal-fpm.sock|fcgi://localhost"
			</FilesMatch>		
		</Directory>
	</IfModule>
</VirtualHost>

Majd jöhet a weboldal engedélyezése és Apache újraindítása:

a2ensite kiserletioldal.local.conf
systemctl restart apache2

Hosts fájl beállítása

Ha egy szerveren több virtualhoszt van, azaz weboldal, akkor az Apache a szerverre irányított domain név alapján tudja eldönteni, hogy melyik virtualhoszt konfigurációt kell végrehajtania. Amennyiben nem rendelkezünk a megfelelő domain nevekkel, ebben az esetben a kliens oldalon kell beállítani az operációs rendszer hosts fájljában az IP-cím - domain név összefüggéseit.

  • Ha Linux rendszerrel böngészünk, akkor nyissuk meg a /etc/hosts fájlt,
  • ha pedig Windows alól szeretnénk hozzáférni szerverünk weboldalaihoz, akkor pedig nyissuk meg a Windowsban a c:\Windows\System32\drivers\etc\hosts fájlt,

majd tegyük bele az alábbiakat, hogy elérhessük az imént létrehozott weboldalainkat:

192.168.1.120   oregweboldal.local
192.168.1.120   www.oregweboldal.local

192.168.1.120   kiserletioldal.local
192.168.1.120   www.kiserletioldal.local

Az IP-cím helyére természetesen a saját szerverünk címét állítsuk be.

Phpinfo fájlok elhelyezése és az oldalak tesztelése

Idáig mindennel elkészültünk, már csak az oldalak tesztelése maradt hátra. Ezt a legegyszerűbben a szokásos phpinfo() PHP függvény lefuttatásával oldhatjuk meg.

Öregweboldal

Hozzuk létre az oldal webgyökerében a szokásos phpinfo.php fájlt:

nano /var/www/oregweboldal/phpinfo.php

Tegyük bele a szokásos tartalmat:

<?php
    phpinfo();
?>

Mentsük le, majd töltsük be a kliens gépen a böngészőnkben ezt a fájlt oldal webcíme alatt:

Weboldal tesztelése: Öregweboldal - phpinfo futtatása 1.

Bejön a phpinfo oldal, ahol fent láthatjuk az 5.6.40-es PHP verziót, valamint a PHP-FPM működést. Lejjebb görgetve pedig láthatjuk a fájlt futtató felhasználót és környezeti beállításait is:

Weboldal tesztelése: Öregweboldal - phpinfo futtatása 2.

Kísérleti oldal

Itt is hasonlóan járjunk el:

nano /var/www/kiserletioldal/phpinfo.php
<?php
    phpinfo();
?>

Majd töltsük be ezt az oldalt is:

Weboldal tesztelése: Kísérleti oldal - phpinfo futtatása 1.

Itt is a tervezett kimenet fogad bennünket: PHP Version 7.4.0beta4 + PHP+FPM. Majd lejjebb:

Weboldal tesztelése: Kísérleti oldal - phpinfo futtatása 2.

Itt pedig láthatjuk a scriptet futtató "kiserletioldal" nevű felhasználót, és annak környezeti paramétereit.

Valamint, ha újra betöltjük a leírás elején készített beállítás tesztjét, akkor az is ugyanúgy elérhető maradt a szerver alapértelmezett virtualhosztja által, ahol pedig továbbra is az elején beállított PHP7.3 működik.

 

 

Többféle PHP verzió használata egyetlen weboldal különböző alkönyvtáraiban

És végezetül, még egy ritkább eset, amikor van egy weboldal egy domain név alatt, és ezen belül szeretnénk többféle PHP verziót használni. Elsőre furcsának tűnhet, de előfordulhatnak olyan helyzetek, amikor ilyen megoldásra van szükségünk. Például ha nem szeretnénk több domain nevet vásárolni, hanem csak az egyetlen meglévővel elérhetővé tenni több weboldalt, vagy webalkalmazást, amiknek külön PHP igényük van – mindezt egyetlen webtárhely több alkönyvtárából szolgáltatva.

A feladat

Ezt a részt szintén az előző fejezet kísérleti oldalára építjük, hogy elkerülhessük a további felesleges beállításokat.

A mostani feladat tehát hogy a kísérleti oldalon belül létrehozunk egy alkönyvtárat, amiben a 7.2-es PHP rendszer szolgálja ki a szerver oldali php szkriptfájljainkat, valamint az alkönyvtárban működő eltérő PHP verzió is ugyanazzal a felhasználóval kerül futtatásra.

A megoldás

Alkönyvtár létrehozása és jogosultság beállítása

Lépjünk be a kísérleti oldal webgyökerébe, hozzunk létre egy alkönyvtárat benne:

cd /var/www/kiserletioldal/
mkdir mkdir php7-2

Majd állítsuk be a jogosultságát:

chown kiserletioldal:kiserletioldal php7-2/
Itt fontos megjegyezni, hogy bár eltérő felhasználót is használhatnánk erre a célra, de ha már egy webtárhelyen mozgunk, akkor célszerű ugyanazzal a felhasználóval beállítani mindent, így ha később szükség van a tárhelyen lévő rendszerek közötti interakciókra (pl. a rendszerek közötti fájlműveletek, stb), akkor ne ütközzünk jogosultsági bonyodalmakba.

PHP-FPM pool létrehozása

Hozzunk létre egy 7.2-es PHP-FPM pool-t az alkönyvtárban működő PHP számára:

cd /etc/php/7.2/fpm/pool.d/
cp www.conf kiserletioldal-php7-2.conf

Csak a következetesség kedvéért neveztem el így ezt a conf fájlt, hogy később is tudjuk, hogy hova tartozik, stb. Nyissuk meg szerkesztésre:

nano kiserletioldal-php7-2.conf

És állítgassuk be itt is ezt a már ismert részeket:

[kiserletioldal-php7-2]

[...]

user = kiserletioldal
group = kiserletioldal

[...]

listen = /run/php/php7.2-kiserletioldal-php7-2-fpm.sock

[...]

Itt is érdemes hasonló séma alapján nevet adni a socket fájlunknak. Mentsük le, majd indítsuk újra a 7.2-es FPM-et:

systemctl restart php7.2-fpm

Ellenőrizhetjük is:

systemctl status php7.2-fpm
 php7.2-fpm.service - The PHP 7.2 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php7.2-fpm.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2019-09-28 20:54:45 CEST; 6s ago
     Docs: man:php-fpm7.2(8)
 Main PID: 7870 (php-fpm7.2)
   Status: "Ready to handle connections"
    Tasks: 5 (limit: 4915)
   CGroup: /system.slice/php7.2-fpm.service
           ├─7870 php-fpm: master process (/etc/php/7.2/fpm/php-fpm.conf)
           ├─7871 php-fpm: pool kiserletioldal-php7-2
           ├─7872 php-fpm: pool kiserletioldal-php7-2
           ├─7873 php-fpm: pool www
           └─7874 php-fpm: pool www

szept 28 20:54:44 debian9 systemd[1]: Starting The PHP 7.2 FastCGI Process Manager...
szept 28 20:54:45 debian9 systemd[1]: Started The PHP 7.2 FastCGI Process Manager.

Megy szépen a pool-unk...

Apache virtualhoszt módosítása

Itt most nem hozunk létre új virtualhosztot, hanem a kísérleti oldalét módosítjuk. Nyissuk meg szerkesztésre:

nano /etc/apache2/sites-available/kiserletioldal.local.conf

És tegyük bele az alábbi új részletet a "</Directory>" sor után:

		# php7-2 alkönyvtár beállítása
		<Directory /var/www/kiserletioldal/php7-2>
			DirectoryIndex index.php index.html
			<FilesMatch "\.(php)$">
				SetHandler "proxy:unix:/run/php/php7.2-kiserletioldal-php7-2-fpm.sock|fcgi://localhost"
			</FilesMatch>
		</Directory>

hogy végül így nézzen ki az egész fájl:

<VirtualHost *:80>
	ServerName kiserletioldal.local
	ServerAlias www.kiserletioldal.local

	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/kiserletioldal

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

	<IfModule mod_proxy_fcgi.c>
		<Directory /var/www/kiserletioldal>
			DirectoryIndex index.php index.html
			<FilesMatch "\.(php)$">
				SetHandler "proxy:unix:/run/php/php7.4-kiserletioldal-fpm.sock|fcgi://localhost"
			</FilesMatch>		
		</Directory>

		# php7-2 alkönyvtár beállítása
		<Directory /var/www/kiserletioldal/php7-2>
			DirectoryIndex index.php index.html
			<FilesMatch "\.(php)$">
				SetHandler "proxy:unix:/run/php/php7.2-kiserletioldal-php7-2-fpm.sock|fcgi://localhost"
			</FilesMatch>
		</Directory>

	</IfModule>
</VirtualHost>

Mentsük le, majd indítsuk újra az Apache-ot:

systemctl restart apache2

 

 

Alkönyvtár tesztelése

Végezetül hozzunk létre ebben az alkönyvtárban is egy phpinfo.php fájlt:

nano /var/www/kiserletioldal/php7-2/phpinfo.php

És tegyük bele a szokásos sorokat:

<?php
    phpinfo();
?>

Majd töltsük be a scriptet a böngészőnkbe az alkönyvtárból:

Weboldal tesztelése: Kísérleti oldal aloldala - phpinfo futtatása 1.

Lejjebb pedig a felhasználó, és a környezeti változók:

Weboldal tesztelése: Kísérleti oldal aloldala - phpinfo futtatása 2.

Ami itt még érdekes lehet, hogy a PHP a "DOCUMENT_ROOT" -ot itt is az eredeti weboldal document_root-jaként látja, mivel ugyanabból a virtualhosztból ered ez a környezet is, mint amiből a kísérleti oldal maga.

Itt még érdemes megjegyezni, hogy ha php-ben include módszerrel húzunk be a másik PHP-t használó alkönyvtárból .php fájlokat (vagy fordítva), akkor az ugyanazzal a PHP verzióval és környezettel fog futni, mint amiből meghívtuk, ugyanis a másik .php fájlt ilyenkor nem az Apache irányítja át a megfelelő FPM-nek, hanem a már futó PHP feldolgozó része tölti be a másik .php fájlt, ami az eredetileg futtatott fájl környezetét örökli. Ha tehát egy webalkalmazáson belül szeretnénk használni két (vagy akár több) különböző PHP verziót, akkor az alkalmazáson belül AJAX technikával töltsük be az alkönyvtárból a .php fájlokat, így azok újra a böngészőtől kiindulva az Apache-on át kerülnek betöltésre a megfelelő PHP-FPM-el. Így például a két külön PHP-ból közösen lehet használni az adatbázist, vagy betölteni a különböző konfig fájljainkat, vagy egyéb fájlműveleteket is végezhetünk egyszerre a két külön verzióval. Ha pedig belső változókat is szeretnénk megosztani a két verziót futtató php fájlok között, erre a célra használhatunk JSON vagy egyéb struktúrált adatokat, amiket pl. POST-ban adunk át a másik php-nek.

 

Konklúzió

Ezek lennének tehát a különböző PHP verziók, és ezeknek a kombinált használata egy szerveren, vagy akár egy weboldalon belül. Természetesen még akármennyi újabb pool-t indíthatunk bármelyik verzióból egyedi igényeinknek megfelelően.

A sury.org csomagtára pedig folyamatosan frissül, így a különböző PHP verzióink miatt sem kell aggódnunk, hogy lemaradunk a frissítésekről. Azonban nem árt szem előtt tartani azt a tényt, hogy ez egy külső csomagtár, amit egy kisebb létszámú csoport, vagy akár csak egy ember tart fenn. így ha bármi történik a csomagtár üzemeltetőivel, a csomagtárból telepített szoftvereinkhez nem kapunk többé frissítéseket. Ezért érdemes képesnek lennünk arra is, hogy saját magunk fordítsunk le forráskódból szoftvereket – ez esetben különböző PHP verziókat –, hogy ha véletlenül megszűnik ez a nagyszerű lehetőség, akkor is biztosíthassuk magunknak a szükséges PHP verziókat.

 

 

Lapozó

Ez a leírás több oldalból áll: