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 \.phpgt;
SetHandler "proxy:fcgi://127.0.0.1:9072"
</FilesMatch>
# Some legacy application use PHP 5.5
<Directory /var/www/html56>
<FilesMatch \.phpgt;
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-fpm7- Check for result
Good luck! All Done
Other Articles You May Like:
Ways to make money as a developerAugust 6, 201915 Developer Tools to Make You Super ProductiveSeptember 30, 2021Do You Really Need That Framework?August 5, 2019How to use Async Await in JavaScript.March 7, 20205 curated frontend UI kits for your next web appApril 4, 2020Building GitHub pull requests with TeamCityAugust 12, 2019Node.js, MySQL and async/awaitMarch 5, 2020How to Make Good Code Reviews BetterOctober 4, 2019