Jak zprovoznit php4 a php5 paralelně

Myšlenka

Obvykle jednu verzi PHP mame nainstalovanou jako modul apache serveru, druhou verzi PHP nejde naistalovat jako modul, je tedy nutné ho rouběhnout jako CGI skript. Pak je ale nutné rozlišit ktere php se má použít na interpretování kterého souboru. Na to jsou v principu tři přístupy, pomocí adresáře kde se soubory nachází, podle přípony souboru, nebo podle virtuálního hosta apache serveru. Pro použití na vývoj je podle mě nejlepší třetí varianta, protože pak se dá přepínat verze jen podle hosta (např 127.0.0.1 pro php5, např 127.0.0.2 pro php4).

1. Kompilace php4

Jelikož já mám na kompu php5 jako modul, tak popíšu postup, jak nainstalovat php4 jako cgi. Je potřeba stáhnout php4 ve zdrojácích, je dobré opravit volby v ./configure --with-config-file-path (kde bude php.ini) a --with-mysql (jestli bude kompilováno s podporou MySQL). Jinak se defaultně php přeloží jako cgi.

Instalace

make install, nainstaluje se do /usr/local/bin

:

Konfigurace apache2

No to asi nebude popsáno úplně ideálně, ale funguje to. v adresáři, kde je hhtpd.conf jsem udělal hhtpd.conf.local, který jsem do toho původního naicludoval jeho obsah víceméně byl následující


<VirtualHost 127.0.0.2:80>

 DocumentRoot /srv/www/htdocs/
 ServerName gamma2
 ServerAdmin tomas.pop@seznam.cz

 # We use a separate CGI directory
 ScriptAlias /cgi-bin/ /usr/local/bin/

 # For good measure we also add recognition of PHP5 index
 DirectoryIndex index.php

 # This is the two critical statement for this virtual
 # host we activate PHP5 as a CGI module
 Action php5-cgi /cgi-bin/php
 AddHandler php5-cgi .php5 .php

 <Directory /usr/local/bin/>
  AllowOverride None
  Options +ExecCGI -Includes
  Order allow,deny
  Allow from all
 </Directory>

 <Directory "/srv/www/htdocs/">
  Options None
  AllowOverride None
  Order allow,deny
  Allow from all
  DirectoryIndex index.html index.php
 </Directory>

 UserDir public_html

</VirtualHost>
No a potom se to přepíná pomocí hosta, jak bylo napsáno v příkladu nahoře.

Problémy

PHP4 má starší api mySQL, pokud je novější verze MySQL, než něco jako 4.1, je to problém nejjednoduší řešení je použít sql příkaz

SET PASSWORD FOR 'some_user'@'some_host' = OLD_PASSWORD('newpwd');
více o změně klientského api Mysql.

Odkazy

http://www.aditus.nu/jpgraph/apache2suse10.php
http://gentoo.neysx.org/proj/en/php/php4-php5-configuration.xml
http://schlitt.info/applications/blog/index.php?/archives/83-How-to-run-PHP4-and-PHP-5-prallel.html
http://blog.bitflux.ch/archive/2004/01/19/how_to_run_php4_and_php_5_parallel.html