Tartalom
- oldal: A sury.org csomagtár beüzemelése és a különböző PHP verziók telepítése
- 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
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:
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:
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.
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:
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:
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:
Itt is a tervezett kimenet fogad bennünket: PHP Version 7.4.0beta4 + PHP+FPM. Majd lejjebb:
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/
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:
Lejjebb pedig a felhasználó, és a környezeti változók:
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.
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.
- Enciklopédia - PHP
- Enciklopédia - PHP-FPM
- Hogyan telepíthetjük fel a PHP 8-at Debian vagy Ubuntu rendszerű szerverünkre
- Hogyan telepítsük fel a PHP-FPM-et egy Debian 8 (Jessie) LAMP szerverre
- Hogyan telepítsük a PHP 7.1.19-et opcionális módban Debian 8-as tökéletes szerverre
- Hogyan telepítsük a PHP 5.6.40-et választható verzióként a Debian 9 (Stretch) tökéletes szerverre
- Hogyan állítsuk át manuálisan egy PHP-FPM pool-ban futó weboldalunk vagy webalkalmazásunk PHP verzióját?
- A PHP 8 újdonságai és változásai
Lapozó
- A hozzászóláshoz regisztráció és bejelentkezés szükséges
- 354 megtekintés