Taky máte občas někde nějaký ten shitoidní webík, který prostě na novější verzi, než php 7.4 nepojede, zatímco pro jiný web byste kvůli rychlosti upotřebili php 8.1 ?
Say no more! Jednoduchý článek zde:
Proč chtít nejnovější verzi php
Novější verze PHP většinou znamená vyšší rychlost náběhu stránek, kratší odezva, více odbavených stránek za vteřinu a v drtivé většině případů i lepší bezpečnost a pár ošetřených CVE errorů navíc oproti starším verzím.
To hlavní gró je následující
Předpokládejme, že už máte nainstalovaný apache2.
apt-get install curl wget gnupg2 ca-certificates lsb-release apt-transport-https -y
wget https://packages.sury.org/php/apt.gpg
apt-key add apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php7.list
apt-get update -y
apt-get install php7.4 php7.4-fpm php7.4-mysql libapache2-mod-php7.4 libapache2-mod-fcgid -y
apt-get install php8.1 php8.1-fpm php8.1-mysql libapache2-mod-php8.1 libapache2-mod-fcgid -y
# Pro funkcionalitu wordpressů ještě:
apt-get install php8.1-dom php8.1-mysql php8.1-mbstring -y
systemctl enable php7.4-fpm && systemctl start php7.4-fpm && systemctl status php7.4-fpm
systemctl enable php8.1-fpm && systemctl start php8.1-fpm && systemctl status php8.1-fpm
# Na apachi potom potřebujete povolit následující módy:
a2enmod actions fcgid alias proxy_fcgi
systemctl restart apache2
Nyní potřebujete nakonfigurovat vaše virtualhosty:
/etc/apache2/sites-available/nejakyweb.cz.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
Options +Indexes
DocumentRoot /var/www/html/nejakyweb.cz/
ServerName nejakyweb.cz
ServerAlias www.nejakyweb.cz
ServerAdmin cokoliv@cokoliv.cz
ErrorLog /var/log/apache2/nejakyweb.cz-error.log
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog /var/log/apache2/nejakyweb.cz-access.log common
RewriteEngine On
<Directory "/var/www/html/nejakyweb.cz/">
Options Indexes FollowSymLinks
AllowOverride FileInfo Limit
RewriteEngine On
</Directory>
#ukázka, když máte let's encrypt
SSLCertificateFile /etc/letsencrypt/live/nejakyweb.cz/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/nejakyweb.cz/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
#tato část je zodpovědná za specifickou verzi php 8.1 jen pro tento web (pro tento virtualhost)
<FilesMatch \.php$>
# For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server
SetHandler "proxy:unix:/run/php/php8.1-fpm.sock|fcgi://localhost"
#tam, kde vidíte php8.1 u druhého virtualserveru nahradíte za php7.4 a máte oba weby fungující současně
</FilesMatch>
</VirtualHost>
</IfModule>
Jakmile máte, tak povolte web nejakyweb.cz jakožto virtualhost na apache:a2ensite nejakyweb.cz
měl by ukázat OK.
apachectl configtest
a pak už jen:systemctl restart apache2
A můžete zkusit, co vám vypíše funkce phpinfo(); v adresáři, kde se nachází web a mimo něj.
Zde je starší, ale užitečný odkaz se seznamem balíčků, které upotřebí wordpress. (místo php5 nahraďte za php8.1-názevbalíčku)
Call to undefined function WordPress\Plugin\Encyclopedia\MB_StrToLower()
vyřeší:apt-get install php8.1-mbstring -y
Your PHP installation appears to be missing the MySQL extension which Is required by WordPress
řešení:apt-get install php8.1-mysql -y
WordPress: Class ‚DOMDocument‘ not found
apt-get install php8.1-dom -y
GD is required for generating image thumbnails, resizing images, and generating watermarks
řešení:apt install php8.1-gd -y
#pro weby běžící na php7.4:apt install php7.4-gd -y
V závěru vám povím: Ano, mohli jste to celé udělat na dockeru a dokonce by to bylo kratší, lehčí, ale toto je přesně ten případ, kdy z nějakého důvodu potřebujete mít 1 jediný apache v jeho zájmu mít vše ošetřené, protože potřebujete např. šetřit paměť, nebo místo kvůli docker imagům apod…