PHP Version für Composer ändern

Wie kann man dem Composer die passenden PHP Version zuweisen? Ein paar Anregungen für einfacheres Arbeiten mit PHP und dem Composer.

Da bei unseren Hosting-Angeboten mehrere Projekte verwaltet werden können, welche auch verschiedene PHP Versionen verwenden können, müssen die verschiedenen PHP Versionen auch als CLI Variante für die Secure Shell Umgebung (SSH) verfügbar sein. Und eine ausgewählte PHP Version ist als Standard definiert, wenn diese wie folgt aufgerufen wird:

SHELL #> php -v
PHP 7.4.33 (cli) (built: Nov  8 2022 11:36:34) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.33, Copyright (c), by Zend Technologies

In manchen Fällen ist dies aber nicht die richte PHP Version und sie benötigen anstatt 7.4, die aktuellste PHP Version 8.x.

Die Standard PHP Version festlegen oder ändern

Mit Hilfe von "alias" lässt sich die Default-PHP-Version recht einfach korrigieren, ohne dass der Administrator tätig werden muss.

SHELL #> alias php="/usr/bin/php8.1"

SHELL #> php -v
PHP 8.1.12 (cli) (built: Oct 28 2022 18:32:13) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.12, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.12, Copyright (c), by Zend Technologies

Nun haben Sie die zu Ihrem Projekt passende PHP Version zum Arbeiten zur Verfügung. Damit dies auch nach dem Login wieder der Fall ist und der "alias" Befehl nicht immer manuell ausgeführt werden muss, kann die Anweisung in der Datei ".bash_profile" hinterlegt werden. Bei jedem Login und auch bei jeder Aktion Ihres Users, wie z. B. beim ausführen eines Cron-Jobs, wird diese eingelesen und der Alias ausgeführt.

Composer und die PHP Version

Das Setzen der PHP Version mit Hilfe von Alias behebt nun leider nicht das Problem mit dem PHP Composer. Ein Blick in die Datei "composer" offenbart den Grund für das Problem. Es wird der PHP-CLI Interpreter nicht direkt, sondern über den Befehl "/usr/bin/env php" aufgerufen, welcher aber den Alias Mechanismus umgeht.

#!/usr/bin/env php
<?php
/*
 * This file is part of Composer.
 *
 * (c) Nils Adermann <naderman@naderman.de>
 *     Jordi Boggiano <j.boggiano@seld.be>
 *
 * For the full copyright and license information, please view
 * the license that is located at the bottom of this file.
 */

Nun könnte man auf die Idee kommen, einfach die oberste Zeile (Shebang genannt) anzupassen und die PHP Version mit direktem Pfad einzutragen, aber das wäre ja zu einfach :-/. Leider oder auch glücklicherweise, überprüft der Composer selbst seine Datei auf Veränderungen und verweigert daraufhin den Dienst, wenn die Checksumme nicht mehr stimmt. Außerdem wäre die Änderung nach jedem Update des Composers wieder weg. Es muss also eine andere Lösung her.

Anzeige
NGINX Hosting zum Hammer Preis ab 4,20 Euro inklusive Domain!!

3 Wege zum Ziel

Lösung 1:

Die Shebang wird nur ausgewertet, wenn der Composer direkt als Kommando über die Shell gestartet wird. Es ist aber auch möglich, den Composer an PHP zu übergeben und auszuführen, da dieser schließlich in PHP geschrieben ist. Zu beachten ist, dass der Pfad zum Composer ausgeschrieben werden muss, da dieser ansonsten nicht gefunden wird.

SHELL #> which composer #wo befindet sich der Composer
/usr/local/bin/composer

SHELL #> /usr/bin/php7.4 /usr/local/bin/composer --version
Composer version 2.4.4 2022-10-27 14:39:29

SHELL #> /usr/bin/php8.1 /usr/local/bin/composer --version
Composer version 2.4.4 2022-10-27 14:39:29

Lösung 2

Wie bei PHP, ist es nun auch möglich einen Alias für den Composer selbst zu definieren, damit die korrekte PHP Version ausgeführt wird.

SHELL #> alias composer="/usr/bin/php8.1 /usr/local/bin/composer"

## Oder anderes
SHELL #> alias composer74="/usr/bin/php7.4 /usr/local/bin/composer"

SHELL #> alias composer81="/usr/bin/php8.1 /usr/local/bin/composer"

Wie weiter oben schon angesprochen, können Sie den gewünschten Alias wieder in der Datei ".bash_profile" eintragen, damit Ihre Arbeitsumgebung nach jedem Shell Login wieder zur Verfügung steht. Auch sind dort weitere Anpassungen Ihrer Arbeitsumgebung realisierbar.

Lösung 3

Es ist auch möglich, die Pfad-Variable der Shell so zu verändern, dass als Erstes im Ordner home/bin nach ausführbaren Dateien gesucht wird. Im Anschluss wird ein symbolischer Link auf die auszuführende PHP Version gelegt. Die Pfad-Angabe kommt wieder in die .bash_profile. Der Link (ln ....) muss nur einmalig ausgeführt werden.

SHELL #> PATH=/var/www/$USER/home/bin/:$PATH
SHELL #> ln -s /usr/bin/php8.1 ~/bin/php

Natürlich könnten Sie jetzt z. B. auch einen eigenen Composer in "home/bin" platzieren, welcher nun Vorrang gegenüber der von uns vorinstallieren Version hat. Auch Ihre eignen Shell Scripte können so bequemer ausgeführt werden, wenn Sie diese im Ordner bin/ platzieren.

Somit sollte das PHP Problem in Verbindung mit dem Composer behoben sein.

happy composing!

Link zur Composer Homepage:
https://getcomposer.org/


© Webhosting Franken

Diese Webseite verwendet Cookies nur zu absolut notwendigen Zwecken. Weitere Informationen finden Sie unter Datenschutz