Composer für eine bestimmte PHP-Version

In PHP-Projekten wird der Paketmanager Composer immer wichtiger. Wenn man allerdings mehrere PHP-Versionen parallel auf dem Server betreibt, muss man darauf achten, mit welcher davon Composer arbeitet. Sonst kann es passieren, dass Composer auf der Kommandozeile mit der einen PHP-Version arbeitet, der Webserver mit einer anderen, und eine Applikation das übelnimmt.

Ich habe beispielsweise auf einem Test- und Experimentierserver insgesamt vier PHP-Versionen installiert: 5.6, 7.0, 7.1 und 7.2. Dank dem PPA von Ondřej Surý ist das kein großes Hexenwerk. Dann aber meldete sich eine Installation von Drupal 8 plötzlich mit merkwürdigen Fehlermeldungen. Schnell stellte sich heraus, dass es an unterschiedlichen PHP-Versionen lag: Für den Serverplatz hatte ich 7.1 eingerichtet, Composer hatte sich der 7.2 bedient. In diesem Fall war es kein Problem, den Serverplatz ebenfalls auf PHP 7.2 zu stellen, und Drupal wollte wieder mitspielen.

Was aber, wenn das nicht geht, und man Composer auf eine von mehreren vorhandenen PHP-Versionen festnageln muss? Grundsätzlich verwendet Composer das "Standard-PHP", also dasjenige Binary namens php, das als erstes im Pfad gefunden wird. Man kann aber auch einfach das phar mit dem gewünschten Binary aufrufen, zum Beispiel

php7.0 /pfad/zum/composer.phar diagnose

Wenn man das phar zum Beispiel als /usr/local/bin/composer installiert hat, wäre das

php7.0 /usr/local/bin/composer diagnose

Aus Gründen der Bequemlichkeit kann man sich eine Handvoll kleine Shellskripte schreiben, die diese Aufrufe vereinfachen. Folgendes Skript reicht die übergebenen Parameter an Composer, aufgerufen mit PHP 7.0, weiter

#!/bin/bash
php7.0 /usr/local/bin/composer "$@"

Dieses Skript als zum Beispiel composer70 im Pfad abgelegt, und schon kann man einfach schreiben

composer70 diagnose

und Composer verwendet PHP 7.0. Analog kann man für weitere PHP-Versionen vorgehen.

Ach ja, falls jemand das Composer-Kommando diagnose nicht kennt, das ist in diesem Kontext durchaus hilfreich. Denn damit löst man nicht nur einige Selbsttests aus (Kann ich mich zu Packagist verbinden? Habe ich genügend freien Speicherplatz?), sondern es wird auch die verwendete PHP-Version ausgegeben.