In this tutorial we will set up multiple PHP Versions which is 5.6 & 7.2 on the Apache same machine.

it’s very practical and common to have multiple php versions and run it simultaneously with apache on a single server. Maybe you have a php script and want to test it with multiple php version. in such case this article is for you.

 

1- Install prerequisites

before installing and running two php versions, we need to install apache and some repository. so execute these commands:

yum install httpd
yum install epel-release
yum install yum-utils

2- Install multiple php versions

php-fpm is available in remi repository. so we install this repo and then after multiple php versions:

yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum install php56 
yum install php72
yum install php56-php-fpm
yum install php72-php-fpm

3- Configure SELinux

Install Selinux Policy Targeted

yum install selinux-policy-targeted

to allow selinux run php-fpms scripts, run these commands:

semanage port -a -t http_port_t -p tcp 9072
semanage port -a -t http_port_t -p tcp 9056

4- Configure php-fpm

by default, each php-fpm version is listening on port 9000. because we want to run multiple php versions, we need to change default port:

sed -i 's/:9000/:9056/' /etc/opt/remi/php56/php-fpm.d/www.conf
sed -i 's/:9000/:9072/' /etc/opt/remi/php72/php-fpm.d/www.conf

Start the php-fpm

systemctl start php72-php-fpm
systemctl start php56-php-fpm

now we need to make script wrapper to call php56-cgi and php72-cgi:

cat > /var/www/cgi-bin/php56.fcgi << EOF
#!/bin/bash
exec /bin/php56-cgi
EOF

cat > /var/www/cgi-bin/php72.fcgi << EOF
#!/bin/bash
exec /bin/php72-cgi
EOF

Then we set executable bit on both scripts:

sudo chmod 755 /var/www/cgi-bin/php56.fcgi
sudo chmod 755 /var/www/cgi-bin/php72.fcgi

5- Configure apache

Here we create two path. one for php-fpm56 and another for php-fpm72. you can change these paths with your own:

Php7.2 /var/www/html

Php5.6 /var/www/html56

Edit conf file /etc/httpd/conf.d/php.conf

ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
AddHandler php56-fcgi .php
Action php56-fcgi /cgi-bin/php56.fcgi
Action php72-fcgi /cgi-bin/php72.fcgi

<Directory /var/www/html56>
  DirectoryIndex index.php
  AllowOverride all
  Require all granted
  AddHandler php56-fcgi .php
  Action php56-fcgi /cgi-bin/php56.fcgi
</Directory>
<Directory /var/www/html>
  DirectoryIndex index.php
  AllowOverride all
  Require all granted
  AddHandler php72-fcgi .php
  Action php56-fcgi /cgi-bin/php72.fcgi
</Directory>
#
# The following lines prevent .user.ini files from being viewed by Web clients.
#
<Files ".user.ini">
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order allow,deny
        Deny from all
        Satisfy All
    </IfModule>
</Files>

#
# Allow php to handle Multiviews
#
AddType text/html .php

#
# Add index.php to the list of files that will be served as directory
# indexes.
#
##DirectoryIndex index.php

<FilesMatch \.php



























gt;
SetHandler "proxy:fcgi://127.0.0.1:9072"
</FilesMatch>
# Some legacy application use PHP 5.5
<Directory /var/www/html56>
<FilesMatch \.php

gt;
SetHandler "proxy:fcgi://127.0.0.1:9056"
</FilesMatch>
</Directory>

6- Start services

Now we enable and start apache and php-fpm services:

systemctl enable httpd
systemctl enable php56-php-fpm
systemctl enable php72-php-fpm

systemctl start httpd
systemctl start php56-php-fpm
systemctl start php72-php-fpm

7- Check for result

 

Good luck! All Done

0
Would love your thoughts, please comment.x
()
x