After showing you how to set up
multiple PHP versions on a single
machine, it’s time to explain how to stuff all those compiled
php-cgi executables into a single Apache web server instance.
Idea
-
Instead of using mod_php, mod_fastcgi is going
to be utilized.
-
Every single PHP version runs its own CGI server
-
Configuration of used PHP version is made per virtual host.
Installation of FastCGI
Debian
The Debian setup is painless:
aptitude install libapache2-mod-fastcgi apache2-mpm-worker apache2-suexec
a2enmod actions fastcgi suexec
CentOS
The open source version of Redhat’s operating system does not provide
the fastcgi module for Apache, which is why one needs to install it
by hand. It’s trivial.
Assuming phpfarm is installed in /root/phpfarm,
you need to chmod +x /root. Last but not least is
setting up permissions for the fastcgi state files:
chmod +x /var/log/httpd.
FastCGI setup
After mod_fastcgi is available, we need to prepare the FastCGI
servers. Open /etc/{apache2,httpd}/{apache2,httpd}.conf
and make it load conf/php-cgisetup.conf before including
server.conf. Put the following
lines into conf/php-cgisetup.conf:
#php-cgi setup
#used for multiple php versions
FastCgiServer /var/www/cgi-bin/php-cgi-5.2.12
FastCgiServer /var/www/cgi-bin/php-cgi-5.3.0
FastCgiServer /var/www/cgi-bin/php-cgi-5.3.1
ScriptAlias /cgi-bin-php/ /var/www/cgi-bin/
PHP-CGI setup
For each single php version you installed with
phpfarm,
you need to create a file
/var/www/cgi-bin/php-cgi-$version and make
it executable. Example for php-cgi-5.3.2:
#!/bin/sh
PHPRC="/etc/php5/cgi/5.3.2/"
export PHPRC
PHP_FCGI_CHILDREN=3
export PHP_FCGI_CHILDREN
PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_MAX_REQUESTS
exec /root/phpfarm/inst/bin/php-cgi-5.3.2
Activating a PHP version in a virtual host
If you followed all of the previous steps, everything is
setup now and ready to be used. In your
/etc/{apache2,httpd}/conf/server.conf, put the following
code in each section that you
like to switch to a certain version of PHP:
AddHandler php-cgi .php
Action php-cgi /cgi-bin-php/php-cgi-5.3.2
Conclusion
With the simple steps listed above and the help of phpfarm,
you are able to test your web applications in a dozens or more
PHP versions easily.
As as side note: The CGI versions of PHP are only used on the vhosts
that you determine. All others are still served by mod_php
that was probably setup before, making it trivially easy to keep your
server’s main web sites up-to date with your distribution’s
package manager.