Zprovoznění PHP 4 a PHP 5 na jednom serveru
Školení, která pořádám
Pokud chceme na jednom webovém serveru Apache na stejném portu najednou provozovat PHP 4 i PHP 5, máme v zásadě dvě možnosti:
- Nainstalovat jednu verzi přes CGI a druhou přes modul (nebo také přes CGI).
- Nainstalovat obě verze přes modul a použít proxy server.
První varianta je o něco jednodušší na zprovoznění a doporučoval bych ji na vývojovém počítači, druhá varianta by měla být výkonnější a doporučoval bych ji na serveru (pokud má server k dispozici dvě IP adresy, tak proxy server není potřeba).
Ať se rozhodneme pro kteroukoliv variantu, musíme si zvolit, jakým způsobem budeme rozhodovat o tom, zda se použije PHP 4 nebo PHP 5. Možnosti jsou v zásadě tyto:
- Na základě koncovky skriptu
- Hodí se, pokud máme v jednom projektu smíchané skripty pro PHP 4 i PHP 5
- Na základě adresáře
- Hodí se, pokud máme některé projekty v PHP 4 a jiné v PHP 5.
- Na základě doménového jména
- Hodí se, pokud chceme skripty z PHP 4 odladit pro PHP 5, nebo v předchozím případě.
Uvedené možnosti se dají i kombinovat.
Instalace PHP 5 jako modulu a PHP 4 jako CGI
Pokud provozujeme PHP 5 jako modul, máme v konfiguraci Apache něco takovéhoto:
LoadModule php5_module "C:/Program Files/PHP/php5apache2.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "C:/Program Files/PHP"
Následující řádky určí, že soubory typu application/x-httpd-php4
se mají zpracovat jako CGI skripty pomocí PHP 4:
ScriptAlias /php-cgi/ "C:/Program Files/PHP4/"
Action application/x-httpd-php4 "/php-cgi/php-cgi.exe"
Zbývá určit, jaké soubory budou zmíněného typu:
# soubory s koncovkou .php4
AddHandler application/x-httpd-php .php4
# soubory s koncovkou .php v určitém adresáři
<Directory /php4/>
AddHandler application/x-httpd-php .php
</Directory>
# soubory na určité doméně
NameVirtualHost *:80
<VirtualHost *:80>
</VirtualHost>
<VirtualHost *:80>
ServerName 127.0.0.1
AddHandler application/x-httpd-php4 .php
</VirtualHost>
Poslední případ je nejsložitější, ale na následnou práci obvykle nejpohodlnější. Spočívá v nastavení virtuálního hosta – první sekce se použije pro všechny domény, jejichž jméno nevyhovuje následujícímu seznamu (v tomto případě tedy např. i localhost
), druhá sekce určí, že pokud k serveru přistoupíme přes adresu 127.0.0.1
, tak se obsluha koncovky .php
přepíše na PHP 4.
Dvě instalace Apache
Způsob zprovoznění dvou instalací Apache, ať už se dvěma IP adresami nebo na dvou různých portech s využitím proxy serveru popisuje Derick Rethans.
Trik
Dodatečně jsem zjistil, že návod na zprovoznění dvou verzí PHP byl v češtině již popsán v obou zmíněných variantách, navíc s popisem triku, jak oba moduly zprovoznit na jednom serveru.
Diskuse
Satai:
Dekujme bohum za jazyky a prostredi, ktera jsou zpetne kompatibilni.
Farin:
Jak uz nekdo zminoval - nikdy neni tak hrozne aby bylo nutne pouzivat PHP4. A ja dodam skoda ze to neplati o PHP5 :-)
RiZe:
Tak tímto článkem jsi mi udělal opravdu obrovskou radost Jakube. Dík moc :-)
anode:
Četl jsem to jenom zběžně a nezkoušel jsem to, ale myslím, že v uvedené konfiguraci je chyba:
# soubory s koncovkou .php4
AddHandler application/x-httpd-php4 .php4
# soubory s koncovkou .php v určitém adresáři
<Directory /php4/>
AddHandler application/x-httpd-php4 .php
</Directory>
Vždycky připsat k názvu handleru tu 4ku...
Nikoliv. php4_module stejně jako php5_module zpracovává typ application/x-httpd-php. Kdyby tomu tak nebylo, tak se to nemusí dělat tak složitě. Jak to zařídit, ukazuje odkaz v části Trik.
spaze:
Tedy, aby to dávalo smysl více lidem, /návod na zprovoznění dvou verzí PHP byl v češtině již popsán/ mnou (před více než rokem), takže tímto dík Jakubovi za link.
Shark:
Finta na zprovoznění více verzí PHP na Apachi ve Windows.
Postup:
Hexaeditace souborů php4apache2_2.dll a php4ts.dll ve starší verzi PHP. Poté je třeba nastavit httpd.conf, aby Apache pochopil jak na věc. Jako poslední zedituji soubor windows/system32/drivers/etc/hosts a nastavím aliasy domén.
Standardně nastavím aby soubory s příponou .php4 zpracovávalo vždy PHP4. V budoucnu může přibýt i přípona .php5 určená vyloženě pro PHP5. O příponu .php se pak standardně stará nejnovější verze PHP, ale pomocí virtuálních serverů mohu požadovat, aby stejný soubor zpracovala i jiná verze.
Tak například v doméně php4.localhost zpracovává soubory s příponou .php právě PHP4.
[php4apache2_2.dll]
Najít v souboru text application/x-httpd-php a přepsat ho
na application/x-httpd-p4p. (Číslice 4 je 0x34.)
[php4ts.dll]
Přepsat všechny výskyty php.ini na p4p.ini, jelikož obě verze PHP načítají konfigurační soubor z jednoho adresáře určeného direktivou PHPIniDir "c:/php".
[httpd.conf]
# PHP configuration
#
LoadModule php5_module "c:/php/php5apache2_2.dll"
LoadModule php4_module "c:/php4/php4apache2_2.dll"
AddType application/x-httpd-php .php
AddType application/x-httpd-p4p .php4
PHPIniDir "c:/php"
# Virtual servers
#
NameVirtualHost *:80
<VirtualHost *:80>
</VirtualHost>
<VirtualHost *:80>
ServerName php4.localhost
AddType application/x-httpd-p4p .php
</VirtualHost>
NameVirtualHost *:443
<VirtualHost *:443>
</VirtualHost>
<VirtualHost *:443>
ServerName php4.localhost
AddType application/x-httpd-p4p .php
</VirtualHost>
[hosts]
127.0.0.1 localhost php.localhost php4.localhost
Lukáš Kucharczyk:
Šlo by změnit MIME-typ jinak než hex-editací?
Jakub Vrána :
Změnou zdrojového kódu a překompilováním.
Lukáš Kucharczyk:
Ano, to je mi samozřejmě jasné, ale četl jsem pouze řešení pro Linuxové prostředí, máte pojetí, jak (a jestli vůbec) by se toto dalo provést ve Windows?
Diskuse je zrušena z důvodu spamu.