Skip to content

Instantly share code, notes, and snippets.

@gmodarelli
Last active July 6, 2021 05:23
Show Gist options
  • Star 29 You must be signed in to star a gist
  • Fork 14 You must be signed in to fork a gist
  • Save gmodarelli/5887778 to your computer and use it in GitHub Desktop.
Save gmodarelli/5887778 to your computer and use it in GitHub Desktop.
How to setup Ubuntu 13.04 to work with multiple PHP version at the same time

Multiple PHP version under Ubuntu 13.04

Update your machine

apt-get update
apt-get ugrade

Install some dependencies

apt-get install build-essential

This packages contain a lot of necessary tools like a c and a c++ compiler, make and other libs.

Install git

apt-get install git

Install the lamp server (Apache MySQL PHP)

apt-get install lamp-server^

The installation will ask you to choose a password for the mysql root user. Once finished, open a tab in your browser to http://localhost

You should see a page with the heading "It Works!"

Install php-farm

cd /opt
git clone git://git.code.sf.net/p/phpfarm/code phpfarm

Configure PHP

Before compiling any PHP version, setup the options you need

vim /opt/phpfarm/src/options.sh

Mine looks like this:

#!/bin/bash
# You can override config options very easily.
# Just create a custom options file; it may be version specific:
# - custom-options.sh
# - custom-options-5.sh
# - custom-options-5.3.sh
# - custom-options-5.3.1.sh
#
# Don't touch this file here - it would prevent you to just "svn up"
# your phpfarm source code.

version=$1
vmajor=$2
vminor=$3
vpatch=$4

#gcov='--enable-gcov'
configoptions="\
--enable-bcmath \
--with-mysqli \
--with-curl \
--with-png \
--with-gd \
--enable-gd-native-ttf \
--enable-calendar \
--enable-exif \
--enable-ftp \
--enable-mbstring \
--enable-pcntl \
--enable-soap \
--with-pdo-mysql \
--enable-sockets \
--enable-sqlite-utf8 \
--enable-wddx \
--enable-zip \
--with-openssl \
--with-jpeg-dir=/usr/lib \
--with-zlib \
--with-gettext \
--with-mcrypt \
$gcov"

echo $version $vmajor $vminor $vpatch

custom="custom-options.sh"
[ -f $custom ] && source "$custom" $version $vmajor $vminor $vpatch
custom="custom-options-$vmajor.sh"
[ -f $custom ] && source "$custom" $version $vmajor $vminor $vpatch
custom="custom-options-$vmajor.$vminor.sh"
[ -f $custom ] && source "$custom" $version $vmajor $vminor $vpatch
custom="custom-options-$vmajor.$vminor.$vpatch.sh"
[ -f $custom ] && source "$custom" $version $vmajor $vminor $vpatch

Compile all the PHP version you need, eg

cd /opt/phpfarm/src
./compile 5.5.0

If the compilation fails, just install the libraries that caused the error. In my case I had to install these packages:

apt-get install libxml2 libxml2-dev libssl-dev libcurl4-openssl-dev pkg-config \ 
libcurl4-gnutls-dev libjpeg-dev libpng12-dev libmysqlclient-dev
./compile 5.5.0

To verify the installation

cd /opt/phpfarm/inst/bin
./php-5.5.0 --version

Install and enable FastCGI

apt-get install libapache2-mod-fastcgi apache2-mpm-worker apache2-suexec 
a2enmod actions fastcgi suexec
service apache2 restart

This will disable mod_php.

Edit the /etc/apache2/apache2.conf, add these lines before the includes

FastCgiServer /var/www/cgi-bin/php-cgi-5.5.0
ScriptAlias /cgi-bin-php/ /var/www/cgi-bin/

Now create the file /var/www/cgi-bin/php-cgi-5.5.0, with this content

#!/bin/sh
PHPRC="/etc/php5/cgi/5.5.0/"
export PHPRC

PHP_FCGI_CHILDREN=3
export PHP_FCGI_CHILDREN

PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_MAX_REQUESTS

exec /opt/phpfarm/inst/bin/php-cgi-5.5.0

Make the file executable

chmod +x /var/www/cgi-bin/php-cgi-5.5.0

Configure a VirtualHost to use the php version we just configured eg: /etc/apache2/sites-available/example.conf

<VirtualHost *:80>
  ServerName example.dev
  DocumentRoot /var/www/example/
  <Directory "/var/www/example">
    AddHandler php-cgi .php
    Action php-cgi /cgi-bin-php/php-cgi-5.5.0
    <FilesMatch "\.php$">
      SetHandler php-cgi
    </FilesMatch>
  </Directory>
</VirtualHost>

Enable the site

a2ensite example.conf

Add the server to /etc/hosts

127.0.0.1 example.dev

Restart apache

service apache2 restart

I got an error at this point. Apache was complaining about mod_fast already defined. To fix the problem opne this file /etc/aoache2/mods-available/fastcgi.conf and comment out the last line inside the IfModule block

<IfModule mod_fastcgi.c>
  AddHandler fastcgi-script .fcgi
  #FastCgiWrapper /usr/lib/apahce2/suexec
  #FastCgiIpcDir /var/lib/apache2/fastcgi
</IfModule>

Then restart apache again

service apache2 restart

If you don't get any error you will find a working installation of PHP5.5.0 at http://example.dev :)

@0v3rth3d4wn
Copy link

Thanks for this tutorial. It really works. I just needed to enable the Apache2 actions module

sudo a2enmod actions

P.S. Is there a way to keep 2 PHP versions enabled for separate folders? I can compile 2 versions and configure 2 different virtualhosts but how can I add 2 servers in /etc/apache2/apache2.conf?

@helderco
Copy link

@0v3rth3d4wn You can. Take a look at php-fpm.

@aggarwallalit
Copy link

I have created a directory abc in /var/www/ path and created a new file info.php to print phpinfo(). But when I hit URL http://abc.dev/info.php . It gives "The requested URL /cgi-bin/php-cgi-5.5.9/info.php was not found on this server" error. Can anybody help to resolve this issue?

@joejwright
Copy link

@aggarwallalit I ran into the same issue. You have to add the line:

FastCgiServer /var/www/cgi-bin/php-cgi-5.5.9

To your apache2.conf file. You can add a line for each PHP version you want to use.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment