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:

  1. Apache2 can be configured to use either apache2 SAPI using libapache2-mod-php7.0 package or FPM SAPI using php7.0-fpm with mod_proxy_fcgi.

  2. 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 or php5.6-fpm).

  3. If you are using Apache2 SAPI (libapache2-mod-php*), you need to disable PHP 7.0 after you install libapache2-mod-php5.6 by running a2dismod php7.0 and enable PHP 5.6 by running a2enmod php5.6.

  4. 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.

  5. Please remember that for modules bundled with PHP (like MySQL) the naming convention is phpX.Y-<ext> (f.e. php7.0-mysql and php5.6-mysql), but for external PECL modules (f.e. APCu, mongodb, ...) it's just php-<ext> (f.e. php-apcu, php-mongodb). I recommend running apt-cache search php <ext> on your system to search for correct package name before asking a questions on the Internet.