Hyæna

Through the darkness of future past

MacPorts: Verwalten mehrerer PHP-Versionen


Als Web-Entwickler steht man häufig vor dem Problem, daß man unterschiedliche PHP-Versionen ansprechen muß: Das neue Supi-Dupi-Framework (aka Laravel) verlangt PHP 5.4 oder höher, die alte Arbeitssoftware kann aber nur mit PHP 5.3 so richtig…
Was also tun? Auf Mac OS X bietet sich dafür MacPorts an (kurze Bemerkung: Ich benutze MacPorts seit Jahren, komme damit gut zurecht, kein Grund also, Homebrew einzuwerfen…).

Die aktuelle Umgebung hier: Mac OS X 10.9.5 „Mavericks“, MacPorts 2.3.3., Apache 2.2.29 (über MacPorts)

Arbeitsschritte:

  • Installieren der benötigten PHP-Versionen: 5.3.x, 5.4.x, 5.5.x
  • Anpassen der Konfigurationen von Apache und PHP.
  • Erstellen und Aktivieren eines „Switch“-Skriptes zum einfachen Umschalten zwischen den PHP-Versionen.

Zunächst einmal müssen die PHP-Versionen mit den benötigten Modulen installiert werden. Für PHP 5.5 könnte das dann so aussehen:

sudo port install php55 php55-apache2handler php55-APCu php55-curl php55-exif php55-ftp php55-gd php55-gettext php55-iconv php55-intl php55-mbstring php55-mcrypt php55-mongo php55-mysql php55-openssl php55-posix php55-soap php55-sqlite php55-xdebug php55-xsl php55-zip

Für jede PHP-Version muß jetzt aus den von MacPorts gelieferten Vorlagen die entsprechende php.ini-Datei erstellt werden. Die Pfade lauten dann so:

/opt/local/etc/php53/php.ini
/opt/local/etc/php54/php.ini
/opt/local/etc/php55/php.ini

Für jede PHP-Version erstellen wir nun eine eigene Apache-Konfigurationsdatei. Die Pfade lauten:

/opt/local/apache2/conf/httpd.php53.conf
/opt/local/apache2/conf/httpd.php54.conf
/opt/local/apache2/conf/httpd.php55.conf

Nun ist alles vorbereitet, und wir können die Datei zum Umschalten der Versionen erstellen; sie heißt „php-switch“ und hat folgenden Inhalt:

#!/usr/bin/env bash
/opt/local/apache2/bin/apachectl stop

case "$1" in
'php53')
/opt/local/bin/port select --set php php53
cp /opt/local/apache2/conf/httpd.php53.conf /opt/local/apache2/conf/httpd.conf
;;
'php54')
/opt/local/bin/port select --set php php54
cp /opt/local/apache2/conf/httpd.php54.conf /opt/local/apache2/conf/httpd.conf
;;
'php55')
/opt/local/bin/port select --set php php55
cp /opt/local/apache2/conf/httpd.php55.conf /opt/local/apache2/conf/httpd.conf
;;
esac

/opt/local/apache2/bin/apachectl start

Diese Datei kann man dann in /opt/local/bin ablegen, ausführbar machen und schon kann per

sudo php-switch php55

PHP 5.5 aktiviert werden. Die anderen PHP-Versionen lassen sich dementsprechend aktivieren.

Was passiert nun beim Aufruf von php-switch? Das:

  • Apache wird gestoppt
  • In MacPorts wird wird die aufgerufene PHP-Version als Standard aktiviert.
  • Die für die aufgerufene PHP-Version erstellte Apache-Konfigurationsdatei wird im Apache „eingebunden/aktiviert“.
  • Apache wird wieder gestartet.

So, das war es auch schon. Bedanken muß ich mich bei Mark Story, der mich mit Maintaining two versions of PHP with MacPorts auf die richtige Spur gebracht hat.



Ähnliche Artikel