Bei der Installation einer PHP-Extension hatte ich schon fast aufgegeben, weil mir die verschiedenen auf dem Server installierten PHP-Versionen einen Strich durch die Rechnung gemacht hatten.

Was man zu beachten hat, wenn auf einem Server mehrer PHP-Versionen installiert sind und ein paar hinzugewonnene Erkenntnisse meinerseits.

Welche Version läuft?

Zuerst einmal gilt zu beachten, dass bei der Verwendung von PHP auf der Kommandozeile möglicherweise eine andere Version verwendet wird, als bei der Ausführung via Apache.

Auf der Kommandozeile kann man mit dem Befehl
php -v
die aktuell auf der Kommandozeile verwendete PHP-Version angezeigt bekommen.

Um sicher zu gehen, welche Version letztendlich Apache verwendet, erstellt man sich ein Oneliner-PHP-Skript, schiebt es in das Web-Verzeichnis und ruft es im Browser auf:

<?php phpinfo(); ?>

Alle installierten Versionen auflisten

update-alternatives --config php

Zeigt alle installierten PHP-Versionen an.

Mit diesem Tool kann man auch die von der Kommandozeile verwendete PHP-Version ändern.

Dies funktioniert unter Linux, auf dem Mac leider nicht.

Mein Extension-Installationsproblem

Ich wollte mir eine PECL-Erweiterung installieren, um Abfragen auf Oracle SQL Server ausführen zu können.

Der make-Befehl scheiterte allerdings immer mit irgendeiner Fehlermeldung und auffällig war der in der Log-Ausgabe angezeigte Pfad:

... -I/usr/include/php/20210902/Zend ... <-- 20210902 ist PHP8!

Und das, obwohl ich wie zuvor beschrieben, die PHP-Version der Kommandozeile auf die PHP-Version von Apache umgestellt hatte und phpize PHP 7.3 nutzt.

$ phpize -v
Configuring for:
PHP Api Version:         20180731
Zend Module Api No:      20180731
Zend Extension Api No:   320180731

Die Lösung:
Vor einer Installation einer Extension muss sowohl php, phpize wie auch php-config geändert werden. (Natürlich nur, sofern mehrere PHP-Versionen installiert sind und die Kommandozeile eine andere Version als Apache verwendet, wo die Extension dann Verwendung finden soll.)
Und dies gilt, egal, ob man die Erweiterung mit configure und make selbst kompiliert oder den pecl install-Befehl verwendet.

Das geht so:

Welche Versionen sind vorhanden?

ls /usr/bin/php*

Z.B. PHP 7.3 verwenden:

sudo update-alternatives --set phpize /usr/bin/phpize7.3
sudo update-alternatives --set php /usr/bin/php7.3
sudo update-alternatives --set php-config /usr/bin/php-config7.3

Oder jeweils menügeführt Version anzeigen lassen und ändern

update-alternatives --config php
update-alternatives --config phpize
update-alternatives --config php-config