DEV
BLOG
  • Design
  • Data
  • Discernment

We believe in AI and every day we innovate to make it better than yesterday. We believe in helping others to benefit from the wonders of AI and also in extending a hand to guide them to step their journey to adapt with future.

Know more

Our solutions in action for customers

DOWNLOAD

Featured Post

How we spoke to data in 2 days

What would you do in two days? Let me be more precise, what would you do on a weekend? Depending on the kind of person you are, the answers may differ. Some may wanna stay in, have a good sleep, take it slow. If you are like me, you would be on the road riding […]

Know More

MENU

  • HOME
  • SERVICES
  • PRODUCTS
  • CASE STUDIES
  • INDUSTRIES
  • CAREERS
  • CONTACT US

Artificial Intelligence

Blockchain

Enterprise Solutions

Blog
White Papers
Resources
Videos
News

Installing multiple PHP versions in the same server.

  • mm
    by Shehin FN on Thu Mar 12

Has it ever occurred to you that you want to add a new feature to an application you built years ago and the programming language’s latest version has changed a lot since you built the application?

It happens a lot. And whenever it does, it’s a dilemma for the developers. Should they code in the old version which is not as good as the latest version in terms of performance? Or should they update the old code to the latest version of the language?

In this article, I’d like to share such an experience I faced, and a solution for it.

The challenge I faced was to add a new set of features to a project I developed a few years back. Back then, I coded the application using PHP 5.4 which was the latest version at that time. But right now, the latest PHP version is in 7.4.3. The latest version offers far better performance and security compared to 5.6. So, I had three options to pursue.

1. Code the new features in the 5.6 version

2. Upgrade the old code to 7.4.3

3. Code the new features in 7.4.3 and host them on a separate server

Obviously, option 1 is not a good choice since I’d have to compromise on the performance of the application I’m building. So, it’s easy enough to discard this option. Option 2 has its benefits, but, rewriting the old code base is not economically feasible for my client. Also, it takes a lot of time to re-code everything.

Now we’re left with option three. Let’s take a deeper look at it. It is possible to code the new features of this application in the latest version of PHP and host it on a separate server. I’ll have to manage the API calls and route them to the correct server at the application layer. However, this would make the API calls slower, and eventually, the application would get slower. Also, the infrastructure costs for hosting the application would increase. So, the straightforward solution to solve this problem is to install multiple versions of PHP with Apache on the same server. Is it possible? Yes, it is!

Installing multiple PHP versions on the same server. 

Let’s see how to install multiple PHP versions with Apache without switching PHP versions. Here, we’ll install and configure two VirtualHost on Apache with separate PHP versions. First VirtualHost will work with PHP 5.6 and the second VirtualHost will run with PHP 7.2.

STEP 1: Apache Installation

Execute the following commands from your terminal to install the latest available version of the Apache webserver.

sudo apt update 

sudo apt install apache2 libapache2-mod-fastcgi 

Ubuntu 18.04 Users:

sudo apt install apache2 libapache2-mod-fcgid

STEP 2: Installing PHP

For installing PHP versions, use the PPA maintained here. Execute the following commands to add the PPA to your system.

sudo apt install python-software-properties

sudo add-apt-repository ppa:ondrej/php

To install the multiple PHP versions, we will use PHP FPM and FastCGI. Execute the following commands to install the following packages on your system.

apt update

sudo apt install php5.6 php5.6-fpm

sudo apt install php7.2 php7.2-fpm

Execute the following commands to make sure both services are running.

sudo systemctl status php5.6-fpm

sudo systemctl status php7.2-fpm

 STEP 3: Apache configuration

We need to enable a few modules required for the configuration of multiple PHP versions with Apache. These modules are necessary to integrate PHP FPM and FastCGI with the Apache server.

sudo a2enmod actions fastcgi alias proxy_fcgi

Ubuntu 18.04 Users:

sudo a2enmod actions fcgid alias proxy_fcgi

Now, let’s configure websites on your Apache server. In this tutorial, I am configuring two websites to work with two different  PHP versions. First, create two directories on your server.

sudo mkdir /var/www/php56

sudo mkdir /var/www/php72

Create an index.php containing the phpinfo() function.

echo "<?php phpinfo(); ?>" > /var/www/php56/index.php

echo "<?php phpinfo(); ?>" > /var/www/php72/index.php

Now we can create VirtualHost. Apache keeps all the VirtualHost configuration files under /etc/apache2/sites-available with the extension .conf. Create a file for the first virtual host and edit it.

sudo vim /etc/apache2/sites-available/php56.test.com.conf

Add the following code and replace the ServerName and directory path according to your setup. This website is configured to work with PHP 5.6.

 

Similarly, create a second VirtualHost configuration file to work with PHP 7.2.

<VirtualHost *:80>

    ServerName php56.test.com

    DocumentRoot /var/www/php56

    <Directory /var/www/php56>

        Options -Indexes +FollowSymLinks +MultiViews

        AllowOverride All

        Require all granted

    </Directory>

    <FilesMatch \.php$>

        # Apache 2.4.10+ can proxy to unix socket

        SetHandler "proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost"

    </FilesMatch>

</VirtualHost>

sudo vim /etc/apache2/sites-available/php72.test.com.conf

<VirtualHost *:80>

    ServerName php72.test.com

    DocumentRoot /var/www/php72

    <Directory /var/www/php72>

        Options -Indexes +FollowSymLinks +MultiViews

        AllowOverride All

        Require all granted

    </Directory>

    <FilesMatch \.php$>

        SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost"

    </FilesMatch>

</VirtualHost>


Both PHP versions are now configured. To make them active, you have to create a symbolic link of config files to this directory.  Execute the below command to do the same.

sudo a2ensite php56.test.com

sudo a2ensite php72.test.com

After making all the changes restart Apache to reload new settings changes.

sudo systemctl restart apache2

That’s it. Your setup is completed. Go on and test it out.

 

Author

  • mm
    Shehin FN

Shehin is an experienced backend developer. He focuses on building and deploying crypto exchanges, trade engines, and algorithmic bots. He has ingrained experience in JavaScript, Python, PHP, and Blockchain & Cryptocurrency technologies. He has built several scalable solutions for bitcoin, ethereum, and over 7 other cryptocurrencies. He is also an avid contributor to the open-source community.

Categories

View articles by categories

  • Uncategorized

Subscribe now to get our latest posts

All Rights Reserved. Accubits INC 2020