How can I downgrade from PHP 7 to PHP 5.6 on Ubuntu 16.04?
Update
Today I got again problem with PHP 7 running despite I have disabled php7.0
apache module: phpinfo
was showing php 7 using fastCGI ...
... So if after you follow the below instructions you face this situation, you may need to disable the proxy_fcgi
apache module:
sudo a2dismod proxy_fcgi proxy; sudo service apache2 restart
1. Re-Install PHP 5.6
What worked for me was this guide: http://www.lornajane.net/posts/2016/php-7-0-and-5-6-on-ubuntu
Actually is not required to remove php7.0
, you can install php5.6 together ( also because you will have dependency problem with phpmyadmin
package that required php7.0)
Assuming libapache2-mod-php
is a suitable way to enable PHP in Apache for you, you can proceed in this way:
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php7.0 php5.6 php5.6-mysql php-gettext php5.6-mbstring php-mbstring php7.0-mbstring php-xdebug libapache2-mod-php5.6 libapache2-mod-php7.0
2. Switch PHP version:
From php5.6 to php7.0:
Apache:
sudo a2dismod php5.6 ; sudo a2enmod php7.0 ; sudo service apache2 restart
CLI:
sudo update-alternatives --set php /usr/bin/php7.0
From php7.0 to php5.6:
Apache:
sudo a2dismod php7.0 ; sudo a2enmod php5.6 ; sudo service apache2 restart
CLI:
sudo update-alternatives --set php /usr/bin/php5.6
Ubuntu 16.04 comes with php 7.0
, and some php
applications might still fail with php 7.0
.Therefore, in some cases, it might be sensible to have both php 7.0
and php 5.x
, so that you can choose which version to use for your needs at any time.
You can do so with:
xavi@computer# sudo su
root@computer# add-apt-repository ppa:ondrej/php
root@computer# apt-get update
root@computer# apt-get install php7.0 php5.6 php5.6-mysql php-gettext php5.6-mbstring php-xdebug libapache2-mod-php5.6 libapache2-mod-php7.0 php5.6-curl php5.6-gd php5.6-mcrypt php5.6-xml php5.6-xmlrpc
Installing both php5.6 & php7.0
was clean in my case: no complain of issues, etc.
To switch from php 5.6
to php 7.0
you need to do two things:
# For php in web apps
sudo a2dismod php5.6 && sudo a2enmod php7.0 && sudo service apache2 restart
# For php-cli in the command line
sudo ln -sfn /usr/bin/php7.0 /etc/alternatives/php
or from php7.0 to php5.6:
# For php in web apps
sudo a2dismod php7.0 && sudo a2enmod php5.6 && sudo service apache2 restart
# For php-cli in the command line
sudo ln -sfn /usr/bin/php5.6 /etc/alternatives/php
You can also quickly check which yours is using by running php -v.
Your question lacks important details, so I will answer more broadly.
Assuming you are using packages, there are some important details:
Apache2 can be configured to use either
apache2
SAPI usinglibapache2-mod-php7.0
package or FPM SAPI usingphp7.0-fpm
withmod_proxy_fcgi
.Ubuntu 16.04 has only PHP 7.0 in the repositories, you can use
ppa:ondrej/php
to add support for PHP 5.6 using similar naming scheme (e.g.libapache2-mod-php5.6
orphp5.6-fpm
).If you are using Apache2 SAPI (
libapache2-mod-php*
), you need to disable PHP 7.0 after you installlibapache2-mod-php5.6
by runninga2dismod php7.0
and enable PHP 5.6 by runninga2enmod php5.6
.If you are using FPM SAPI (
php*-fpm
) then you need to change FPM unix socket from/run/php/php7.0-fpm.sock
to/run/php/php5.6-fpm.sock
.Please remember that for modules bundled with PHP (like MySQL) the naming convention is
phpX.Y-<ext>
(f.e.php7.0-mysql
andphp5.6-mysql
), but for external PECL modules (f.e. APCu, mongodb, ...) it's justphp-<ext>
(f.e.php-apcu
,php-mongodb
). I recommend runningapt-cache search php <ext>
on your system to search for correct package name before asking a questions on the Internet.