kategorie:

menu:


PHP5 společně s PHP4 na Apache2

15.02.2008   ::    topic: Linux

Mezi verzemi PHP jsou v některých směrech značné rozdíly. Často se tedy stává, že kód odladěný na PHP5 při nasazení na serveru s PHP4 hází errory a je nutné jej pracně přepisovat. V tomto zápisku popíši jak nastavit pro některé virtuální servery PHP4 a pro ostatní virtuální servery PHP5. Standartně není možné nainstalovat obě verze php jako moduly, protože balíčky libapache2-mod-php5 a libapache2-mod-php4 spolu kolidují. Proto je nutné nainstalovat jednu verzi jako cgi. Spouštění PHP jako CGI má určité nevýhody, například není možné používat sessions a provádění scriptů je pomalejší. Proto tento postup je vhodný spíše na testovací (lokální) servery v kombinaci s aplikacemi, kde php jako cgi nevadí.

Jak mít obě verze php jako modul s jednou instalací Apache2 (2× spuštěného s rozdílnou konfigurací) popisuje Jakub Adamčík na svém blogu.

Následující návod je určen pro Debianí ditribuce. Veškeré přikazy je nutné spouštět s root právy. Postupoval jsem podle návodu na howtoforge, jen s několika odlištnostmi.

Instalace

Předpokládám že již máte nainstalovaný a zkonfigurovaný Apache2 s PHP5 modulem. Nainstalujte si tedy balík php4-cgi. Pokud jej nemáte v repozitáři, přidejte si do zdrojů softwaru (soubor /etc/apt/sources­.list) tento řádek:
deb http://ftp.de.debian.org/debian etch main
Seznam balíků poté aktualizujte a nainstalute balík php4-cgi.

Konfigurace

Do souboru /etc/apache2/httpd­.conf (uživatelská konfigurace apache vkládaná do /etc/apache2/a­pache.conf) zapište
ScriptAlias /php4-cgi /usr/lib/cgi-bin/php4
AddHandler php4-script .php4
Action php4-script /php4-cgi

a zkuste restartovat server apache příkazem

/etc/init.d/apache2 restart

Pokud vám apache místo úspěšného OK vypíše tuto chybu:

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

Připište do konfiguračního souboru apache (/etc/apache2/httpd­.conf) ještě řádek, který se postará o nahrání modulu actions

LoadModule actions_module /usr/lib/apache2/modules/mod_actions.so
Po dalším restartu by již apache neměl vzdorovat.

S touto konfigurací by měl apache soubory s příponou „.php4“ překládat pomocí PHP4 a s příponou „.php“ pomocí PHP5.

očekávaný výsledek

Virtuální servery

Pokud byste chtěli aby se pomocí PHP4 zpracovával celý virtuální web, a nechtěli byste přejmenovávat všechny soubory z *.php na *.php4, může do souboru .htaccess v kořenovém adresáři takového virtuálního serveru vepsat tyto řádky:
AddHandler php4-script .php
Action php4-script /php4-cgi

Tady ale pozor! Já na jsem se s tímto nastavením na své instalaci stal svědkem toho, že takové nastavení v .htaccess ovlivní i ostatní virtuální servery! …bug či feature? :) Pokud se vám toto stane také, je potřeba na ostatních serverech, na kterých chcete používat PHP5 do .htaccess zapsat

AddHandler php5-script .php