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:

  1. Nainstalovat jednu verzi přes CGI a druhou přes modul (nebo také přes CGI).
  2. 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.

Jakub Vrána, Seznámení s oblastí, 18.12.2006, diskuse: 12 (nové: 0)

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...

ikona Jakub Vrána OpenID:

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.

ikona spaze:

Dík za link :)

ikona 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í?

ikona Jakub Vrána OpenID:

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?

ikona Jakub Vrána OpenID:

Viz http://www.php.net/manual/en/install.windows.building.php

Diskuse je zrušena z důvodu spamu.

avatar © 2005-2024 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.