We have a CentOS 6.5 server in production, running sites which are not compatible with PHP 5.4+.
For this reason, we are running Apache 2.2 + PHP 5.3 (mod_php). We also run some newer sites on the server and we
would like to run them on PHP 5.6 in order to take advantage of the performance improvements which have
been realised in the newer versions of PHP. To minimize pain, we will run both versions side by side. This will
require mod_php to be overridden in the VirtualHost by mod_fastcgi. We will install PHP 5.6 FPM to achieve this.
This procedure has also been tested and works on an up to date install of CentOS 6.3!
We have to install a bunch of development libraries, and then we're going to build PHP 5.6 from source.
We will install PHP 5.6 in its own folder, /opt/php56.
This bit is essentially possible to complete by rote:
sudo yum install gcc-c++ libicu libicu-devel.x86_64 libjpeg-devel libvpx-devel libpng-devel libxml2-devel curl-devel
tar -xvf php-5.6.1.tar.gz
cd php-5.6.1
./configure --prefix /opt/php56 --with-mysqli --enable-mysqlnd --with-pdo-mysql --enable-soap --enable-mbstring --enable-intl --with-openssl --with-gd --enable-opcache --enable-phar --enable-fpm --with-curl
make
sudo make install
sudo cp sapi/fpm/init.d.php-fpm /etc/init.d/php56-fpm
sudo cp php.ini-production /opt/php56/lib/php.ini
cd /opt/php56
sudo cp etc/php-fpm.conf.default etc/php-fpm.conf
sudo touch var/log/php-error.logFirst make changes to php.ini. We're using vim because we have our shit together.
sudo vim lib/php.ini- Find
error_logand set it to/opt/php56/var/log/php-error.log - Find
[opcache]and uncomment all the options below. - Change
opcache.enableto1.
Now we need to configure php-fpm.
sudo vim etc/php-fpm.conf - under
[global]- uncommentpid = run/php-fpm.pid - under
[www]- uncomment and updatelisten = 127.0.0.1:9000to readlisten = /var/run/php56-fpm.sock - under
[www]- uncomment and updateuserandgroup, both toapache. - under
[www]- uncomment and updatelisten.userandlisten.group, also both toapache. - under
[www]- uncommentlisten.modeand update to0600.
sudo chmod u+x /etc/init.d/php56-fpm
sudo /etc/init.d/php56-fpm start
sudo /sbin/chkconfig php56-fpm onAs mentioned in the Introduction, we want to minimize pain. That's why we are going to continue
to use Apache 2.2. Sadly this does not eliminate pain entirely as we now have to configure mod_fastcgi
which is basically crap. So crap it isn't even available in our package manager. Let's get it from
a third party.
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
sudo rpm -ivh rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
sudo yum install mod_fastcgi
sudo service httpd reloadWe now need to prepare ourselves for a totally stupid workaround. Just run with this. Google
FastCgiExternalServer for more details if the desire takes you. Or use Apache 2.4 and mod_proxy_fcgi.
cd /var/www/
ln -s vhosts-fpm vhostsCheck out the following config file -
sudo vim /etc/httpd/conf.d/fastcgi.confand make sure that FastCgiWrapper is set to Off.
Now, update the VirtualHost you want to run PHP 5.6 under.
sudo vi /etc/httpd/vhost.d/example.com.confAdd the following lines inside the <VirtualHost/> block. This assumes that your DocumentRoot
is set to /var/www/vhosts/example.com.
AddHandler php56-fcgi .php
Action php56-fcgi /php56-fcgi virtual
Alias /php56-fcgi /var/www/vhosts-fpm/example.com/php56-fcgi
FastCgiExternalServer /var/www/vhosts-fpm/example.com/php56-fcgi -socket /var/run/php56-fpm.sock -pass-header AuthenticationNow reload Apache:
sudo service httpd reloadet voilà~~~~!
Thanks ^^
I got this crazy error today : mod_php always handle .php file ...
This save my week.