Da ich fast nirgends mehr sinnvolle Anleitungen zum kompilieren von PHP gefunden habe und die Optionen bei der Konfiguration bei jeder Version ändern habe ich beschlossen, den Vorgang zum kompilieren von PHP 8.1 hier mal festzuhalten.
Anmerkung: zum Zeitpunkt des Schreibens dieses Tutorials war die aktuelle PHP 8.1 Version 8.1.20
Ich habe PHP so kompiliert dass möglichst viele Anwendungen - aber vorallem Nextcloud - damit abgedeckt werden.
Ausserdem habe ich die PECL Module ebenfalls manuell kompiliert.
Dies kann man als Vorlage benutzen um weitere PECL Module zu installieren.
Zudem habe ich PHP so installiert dass es von Virtualmin zur individuellen Einstellung der PHP Version genutzt werden kann.
Links
PHP herunterladen
mkdir -p /opt/php/source
cd /opt/php/source
wget https://www.php.net/distributions/php-8.1.20.tar.gz
tar xvf php-8.1.20.tar.gz
cd php-8.1.20
PHP konfigurieren
Da ich nicht weiss welche header-Dateien (dies sind die Pakete mit -devel am Ende) bereits auf dem System installiert sind und welche nicht, habe ich die hier nicht gelistet.
Während des Konfigrationsvorgangs wird configure
dann schon meckern wenn ein header fehlt.
Dann muss man dieses Paket einfach installieren und configure
erneut ausführen.
Dies macht man solange bis configure
keine Fehler mehr ausspuckt.
Die Option --prefix=
gibt an, in welches Verzeichnis PHP schlussendlich installiert wird.
./configure --prefix=/opt/php8.1.20 --with-config-file-scan-dir=/opt/php8.1.20/conf.d --enable-debug --disable-short-tags --with-libdir=lib64 --enable-bcmath --with-bz2 --enable-calendar --with-curl --enable-dba --enable-exif --enable-ftp --enable-gd --with-gettext --with-gmp --with-iconv --with-imap --with-imap-ssl --enable-intl --with-ldap --with-ldap-sasl --enable-mbstring --with-mhash --with-mysqli --with-mysql-sock --enable-opcache --with-openssl --enable-pcntl --with-pdo-mysql --with-pdo-pgsql --with-pgsql --with-pear --enable-phar --enable-posix --with-pspell --with-readline --enable-shmop --with-snmp --enable-soap --enable-sockets --with-sodium --enable-sysvmsg --enable-sysvsem --enable-sysvshm --with-tidy --with-xsl --with-zip --with-zlib --with-freetype
PHP kompilieren und installieren
Mit den folgenden beiden Befehlen kompiliert und installiert PHP in das bei --prefix=
angegebene Verzeichnis.
Das Kompilieren kann je nach Rechnerleistung ein paar Minuten dauern.
make
make install
Virtualmin
Damit die PHP Version von Virtualmin gefunden und genutzt werden kann, muss man folgendes Verszeichnis erstellen und dann einen Symlink auf die installierte PHP Version setzen.
mkdir -p /opt/rh/php81/root/usr
ln -s /opt/php8.1.20/bin /opt/rh/php81/root/usr/bin
Nun muss man noch die php.ini kopieren
cp /opt/php/source/php-8.1.20/php.ini-production /opt/php8.1.20/lib64/php.ini
Anschliessend sollte man die default Einstellungen der php.ini an die gewünschten Anforderungen anpassen.
Bei mir sind das z.b. Memory Limit oder auch execution time, etc.
Zum Schluss fügt man den Pfad /opt/php8.1.20/lib64/php.ini
zur default php.ini
im Server-Template ein welches man benutzen möchte um unterschiedliche PHP Versionen anzubieten.
PECL Module
Ich habe die PECL Module manuell installiert damit ich sicher gehen kann dass sie auch für die entsprechende PHP Version passen.
Ich installiere deshalb die Module im Verzeichnis /opt/php/pecl/8.1
.
mkdir -p /opt/php/pecl/8.1
APCu
cd /opt/php/pecl/8.1
wget https://pecl.php.net/get/apcu-5.1.22.tgz
tar zxvf apcu-5.1.22.tgz
cd apcu-5.1.22
/opt/php8.1.20/bin/phpize
./configure --with-php-config=/opt/php8.1.20/bin/php-config
make
make install
memcached
cd /opt/php/pecl/8.1
wget https://pecl.php.net/get/memcached-3.2.0.tgz
tar zxvf memcached-3.2.0.tgz
cd memcached-3.2.0
/opt/php8.1.20/bin/phpize
./configure --with-php-config=/opt/php8.1.20/bin/php-config
make
make install
Imagick
cd /opt/php/pecl/8.1
wget https://pecl.php.net/get/imagick-3.7.0.tgz
tar zxvf imagick-3.7.0.tgz
cd imagick-3.7.0
/opt/php8.1.20/bin/phpize
./configure --with-php-config=/opt/php8.1.20/bin/php-config
make
make install
redis
cd /opt/php/pecl/8.1
wget https://pecl.php.net/get/redis-6.0.0.tgz
tar zxvf redis-6.0.0.tgz
cd redis-6.0.0
/opt/php8.1.20/bin/phpize
./configure --with-php-config=/opt/php8.1.20/bin/php-config
make
make install
PECL Module in PHP nutzen
Um die PECL Module in PHP zu nutzen muss man PHP sagen dass sie installiert sind.
Dies macht man über die php.ini
.
Da ich diese Module global nutzen will, deklariere ich sie im Installations-Verzeichnis von PHP.
Vielleicht ist jemandem die configure
option --with-config-file-scan-dir=/opt/php8.1.20conf.d
aufgefallen?
Die bewirkt, dass PHP automatisch alle ini-Dateien in diesem Verzeichnis scannt (in alphabetischer Reihenfolge) und den Inhalt dieser Dateien in die Konfiguration lädt.
Auf diese Weise kann ich die PECL Module bzw. auch andere Konfigurationen integrieren, ohne die default php.ini
zu verändern.
Also, zuerst erstelle ich mal das Verzeichnis:
mkdir -p /opt/php8.1.20/conf.d
Dann erstelle ich eine 00-PECLload.ini
nano /opt/php8.1.20/conf.d/00-PECLload.ini
mit folgendem Inhalt:
extension=apcu.so
extension=imagick.so
extension=memcached.so
extension=redis.so
Jetzt noch den Webserver neustarten und dann sollte PHP 8.1 einsatzbereit sein!
CLI
Ein kleiner Tip noch um diese PHP Version auch im CLI nutzen zu können:
export PATH=/opt/php8.1.20/bin:$PATH