Bernhard Häussner

Howto: PHP5.3 parallel zu PHP5 installieren

27.10.2009, 17:49

Wenn man die neuen PHP-5.3-Funktionen testen will, aber trotzdem für die meisten Projekte aus Kompatibilitätsgründen eine ältere PHP(5)-Version benutzen will, kann man PHP 5.3 parallel als CGI-Modul installieren. Dazu sind folgende Schritte möglich:

Zunächst benötigt man den Quelltext (Sourcecode) der aktuellen php5.3-stable Version. Er ist zu finden auf der PHP-Download-Seite bzw. Version 5.3.0 kann so direkt heruntergeladen werden:

wget http://de2.php.net/get/php-5.3.0.tar.gz/from/this/mirror
tar xzfv php-5.3.0.tar.gz
cd php-5.3.0/

Dann muss die PHP-Installation konfiguriert werden. Dazu benutzt man zunächst in der Ausgabe von phpinfo() das "Configure Command" als Basis. In diesem ändert man dann in den Dateipfaden php5 zu php53 und man setzt --bindir=/usr/bin/php53, um Konflikte mit anderen php5-Binaries zu vermeiden. Das sieht z.B. so aus:

./configure --prefix=/usr/share/php53\
 --datadir=/usr/share/php53\
 --mandir=/usr/share/man\
 --bindir=/usr/bin/php53\
 --with-libdir=lib64\
 --includedir=/usr/include\
 --sysconfdir=/etc/php53/apache2\
 --with-config-file-path=/etc/php53/apache2\
 --with-config-file-scan-dir=/etc/php53/conf.d\
 --enable-libxml\
 --enable-session\
 --with-pcre-regex=/usr\
 --enable-xml\
 --enable-simplexml\
 --enable-filter\
 --disable-debug\
 --enable-inline-optimization\
 --disable-rpath\
 --disable-static\
 --enable-shared\
 --with-pic\
 --with-gnu-ld

Eine Liste mit allen Optionen zeigt ./configure --help. Das Konfigurieren überprüft alle Einstellungen und wird eine Weile laufen - und meistens nicht beim ersten Mal klappen, was meistens bedeutet, dass --with-xyz verwendet wurde, ohne dass die entsprechenden Libraries gefunden wurden. Dann muss man das Modul deaktivieren oder nach einer Lösung googeln/bingen. Manchmal fehlen auch Header, welche, je nach Distribution, in einem Paket ähnlich wie [lib]xyz-dev[el] zu finden sind.

Als nächstes wird das ganze kompiliert und (als root/superuser) die neue PHP-Version installiert:

make
# optional, dauert, findet aber Fehler:
make test
# bringt die Dateien an ihren Platz: 
sudo make install

Jetzt muss noch Apache über das neue CGI-Modul informiert werden. Dazu müssen die folgenden Konfigurationen gesetzt werden (z.B. elegant in einer neuen Datei /etc/apache2/conf.d/php53cgi.conf):

# Damit mod_mime die neue Dateierweiterung erkennt:
AddHandler php53-cgi .php53
# Damit die Binaries aufgerufen, nicht versendet, werden:
ScriptAlias /bin-php53 /usr/bin/php53/
# Was eigentlich passieren soll:
Action php53-cgi /bin-php53/php-cgi
# Und noch ein paar Einstellungen für die Binaries:
<Directory /usr/bin/php53>
    # Kein .htaccess:
    AllowOverride None
    # CGI aktivieren, softlinks folgen
    Options +ExecCGI +FollowSymLinks
    # normalerweise ist der Zugriff auf alle „sonstigen“ Dateien gesperrt, 
    # daher hier wieder freigeben: 
    Order allow,deny
    Allow from all
</Directory>

Zum Testen kann man z.B. eine phpinfo.php53-Datei anlegen und man sollte die neue PHP-Verion angezeigt bekommen. Auf dieser Info-Seite kann man dann prüfen, ob alle Module verwendbar sind, die Zeitzone gesetzt ist und anderen potentielle Konfigurationsfehler auf die Schliche kommen. PHP 5.3 wird auch seine eigene php.ini in /etc/php53/apache2/php.ini verwenden, wohin man vielleicht zunächst die alte Konfigurationsdatei kopieren will.

# php.ini replazieren:
sudo cp /etc/php5/apache2/php.ini /etc/php53/apache2/php.ini
# im Webroot phpinfo mit namespace-Spielerei anlegen :)
echo "<?php namespace YEEES; phpinfo();" > phpinfo.php53

Nach den Schritten dieses Tutorials dürfte dann PHP 5.3 mehr oder weniger optimal laufen, ohne dass die Funktion alter Scripte eingeschränkt werden muss, und es lässt sich einfach die Interkompatibilität zwischen den Versionen testen.

Keine Garantie, Verwenden auf eigenes Risiko.

Edit 2009-10-28: On-the-fly zu PHP5.3 Wechseln

Das ständige Umbenennen von Dateien kann natürlich sehr mühsam sein. Leicht wechselt man ganze Verzeichnisse zu PHP5.3 indem man folgendes in ihrer .htaccess-Datei einfügt:

AddHandler php53-cgi .php

So kann man dann auch zum Testen schnell den ganzen Server zwischen den Versionen wechseln.

Kurze URL http://1-co.de/b/1R. Post to twitter

Kommentare

cimodev meint: (#205)
29.11.2009, 17:58

Hallo, vielen Dank für das Tutorial. Lässt sich der Apache so konfigurieren, das nur bestimmte VHosts direkt über PHP 5.3 laufen (mit der Endung .php), während andere über PHP 5.2.x laufen? (Quasi vhost-gesteuert, anstatt über die Endung)

Bernhard H. meint: (#206)
29.11.2009, 20:39

Jupp, funktioniert. Einfach die "AddHandler php53-cgi .php"-Direktive zwischen den <VirtualHost>-Blocks der VHosts einfügen, für die du PHP5.3 aktivieren willst.

arsnihilis meint: (#221)
08.03.2010, 15:58

Super HowTo. Unter allen die man im Web zum Thema findet das erste dass bei mir funktioniert hat (Dank des Tipps mit der config Datei im conf.d Verzeichnis der in anderen Howtos irgendwie fehlt)

Vielen Dank

micha meint: (#251)
10.12.2010, 15:35

super artikel, genau was ich gesucht habe, danke ! ;)

aser meint: (#252)
14.02.2011, 15:56

Also ich krig immer diese Fehlermeldung wenn ich make mache:

Generating phar.phar
PEAR package PHP_Archive not installed: generated phar will require PHP's phar extension be enabled.

Fatal error: Uncaught exception 'PharException' with message 'unable to create temporary file' in /root/tmp/php-5.3.5/ext/phar/phar.php:1011
Stack trace:
#0 /root/tmp/php-5.3.5/ext/phar/phar.php(1011): Phar->setStub('#!/usr/bin/php5...')
#1 /root/tmp/php-5.3.5/ext/phar/phar.php(1071): PharCommand->phar_set_stub_begin(Object(Phar), '/root/tmp/php-5...', '/root/tmp/php-5...', '/usr/bin/php53/...')
#2 [internal function]: PharCommand->cli_cmd_run_pack(Array)
#3 /root/tmp/php-5.3.5/ext/phar/phar.php(225): call_user_func(Array, Array)
#4 /root/tmp/php-5.3.5/ext/phar/phar.php(2089): CLICommand->__construct(19, Array)
#5 {main}
thrown in /root/tmp/php-5.3.5/ext/phar/phar.php on line 1011
make: *** [ext/phar/phar.phar] Fehler 255

Ximi meint: (#254)
17.12.2011, 01:15

bei make install kommt:
shtool:install:Error: multiple sources require destination to be directory
make: *** [install-sapi] Error 1
hat jemand ein tip?

Martin Specht meint: (#258)
22.02.2012, 11:17

Die Anleitung funktioniert auf Lenny bestens. Ein paar Grundkenntnisse sind erforderlich. Wenn config Fehler ausgibt, hilft es in der Regel, via "aptitude" die ensprechenden Pakete mit der Endung -dev, z.B. libxml2-dev zu installieren.

In unserem Fall war das Modul Actions nicht aktiv, so dass das Einbetten der Apache-Config den Fehler

Invalid command 'Action', perhaps misspelled or defined by a module not included in the server configuration

ausgab. Hier hilft ein einfaches "a2enmod Actions"






 
Χρόνογραφ
© 2008-2017 by Bernhard Häussner - Impressum - Login
Kurz-Link zu dieser Seite: http://1-co.de/b/1R