How can I downgrade from PHP 7 to PHP 5.6 on Ubuntu 16.04?

585,038

Solution 1

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
      

Solution 2

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.

Solution 3

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.

Solution 4

I think you should remove your php packages and install php5.6. You can proceed as follows:

sudo apt-get purge php7.*
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php5.6

You can then check the version of your php to be sure. It is done as seen below:

php -v
Share:
585,038

Related videos on Youtube

dibs
Author by

dibs

Updated on September 18, 2022

Comments

  • dibs
    dibs almost 2 years

    I am trying to revert my PHP version to 5.6 from 7 and though I removed PHP 7 and then installed PHP 5.6 I still seem to be running version 7.

    Is there a simple method for moving through PHP versions where apache, phpMyAdmin and co are configured appropriately?

    A simple way to change the current version of PHP on the fly and even site by site would be great.

    • dibs
      dibs about 8 years
      I appear to have 5.6 installed but all my php is rendering as text now.
    • storm
      storm about 8 years
      what the output of dpkg -l | grep php| awk '{print $2}' |tr "\n" " " ?
    • dibs
      dibs about 8 years
      dh-php libapache2-mod-php5 php-common php-json php-pear php-xml php5-cli php5-common php5-json php5-readline php5.6 php5.6-bz2 php5.6-cli php5.6-common php5.6-curl php5.6-dev php5.6-fpm php5.6-gd php5.6-json php5.6-mcrypt php5.6-mysql php5.6-opcache php5.6-readline php7.0-common php7.0-json php7.0-xml pkg-php-tools
    • storm
      storm about 8 years
      I see some php7 packages there remove them with aptitude purge php7.0-common php7.0-json php7.0-xml also I want to know what you mean by all my php is rendering as text now
    • dibs
      dibs about 8 years
      I've removed the php7 packages, but pages are still text. I seem to be going round in circles at the moment. I will update this page when I get it sorted.
    • Yannick Schneider
      Yannick Schneider about 8 years
      it means you miss libapache2-mod-php5.6 package ... see my answer below, you don't need to remove php7.0
    • variable
      variable over 2 years
      According to this link (askubuntu.com/a/306555/1516753) isn't it recommended to not install a previous version of PHP on a later version of OS? For example - Ubuntu 16.04 supports PHP 7+.
  • ThunderBird
    ThunderBird about 8 years
    I hope that the fact that you will remove your current php packages and install php freshly will be of great help to you.
  • dibs
    dibs about 8 years
    I'll give this a go but are the two commands for switching versions supposed to be dismoding both versions of php each time?
  • Yannick Schneider
    Yannick Schneider about 8 years
    you are right, thanks, I have fixed the commands :)
  • oerdnj
    oerdnj about 8 years
    You don't need to do grep-awk magic as all packaged depend on php5-common, so simply: apt-get purge php5-common will purge all php5 packages from your system.
  • dibs
    dibs about 8 years
    This appears to be the simplest way to deal with this. I like how you can toggle between versions of PHP too
  • John Linhart
    John Linhart about 8 years
    @Postadelmaga It works to change the PHP version for the web apps. Thanks a lot! But the CLI still runs PHP7. Do you know how to switch that to PHP5.6 as well?
  • razor7
    razor7 about 8 years
    Best way to do it is to remove stock php packages, add Ondrej ppa and then install php7 and php5.6, remember you have phpenmod -v 5.6 to enable a php5.6 module and phpenmod -v 7.0 to enable a php 7.0 module, more info here disqus.com/home/discussion/serversforhackers/…
  • Videonauth
    Videonauth about 8 years
    Use sudo a2dismod php7.0 && sudo a2enmod php5.6 && sudo service apache2 restart to make sure the following commands are only run when the before one succeeds. Proposed an edit to this answer.
  • toesslab
    toesslab about 8 years
    Thx for your answer but changing from 5.6 to 7.0 doesn't seem to work, cause when I run php -v after restarting apache it still shows 5.6.21
  • Shoaib Nawaz
    Shoaib Nawaz about 8 years
    The post saved my day.
  • Yannick Schneider
    Yannick Schneider about 8 years
    @Daenu that because php -v is will show you the php cli version ... the command suggested is for Apache ... if you do a phpinfo() in a webpage you will see the difference.
  • toesslab
    toesslab about 8 years
    After writing that comment, I realised that too. Sry I'm a linux newbie.... Thx for that great answer!
  • Amine Jallouli
    Amine Jallouli about 8 years
    This is the best answer for the ones willing to install both php5.6 and php7.0 on ubuntu 16.04
  • ToX 82
    ToX 82 about 8 years
    I love this solution! Unfortunately, I have tried to do the same with phpbrew with no luck, and while I can run php7.0.6 perfectly and I can switch to 5.6 (there are no errors in the shell when I disable php7 and enable php5), apache seems to be broken with php5 and going to localhost simply doesn't work (unable to reach the website). If I switch back to php7, apache works again. I am not sure this is related to phpbrew, but still I can't use php5...
  • Yannick Schneider
    Yannick Schneider about 8 years
    my guess is that you miss some php5.6 module try to compare phpinfo between php5.6 and php7.0, check the apache log.
  • ToX 82
    ToX 82 about 8 years
    Thanks for your answer, but the problem is that apache with php5 is not working at all. So no phpinfo. When I switch to php7, boom: phpinfo works immediately. Also no errors in /var/log/apache2/error.log and no errors in the console when switching between the two versions. Don't know if I can look somewhere else...
  • ToX 82
    ToX 82 about 8 years
    @Postadelmaga, it worked by uninstalling both php and apache and reinstalling from scratch. Thanks!
  • myol
    myol about 8 years
    Can you elaborate a little on how you would change the FPM unix socket?
  • Jorge Orpinel Pérez
    Jorge Orpinel Pérez almost 8 years
    sudo ln -sfn /usr/bin/php5 /etc/alternatives/php is what I needed.
  • Nick
    Nick almost 8 years
    Some folks need to stop using php5 (vs 5.6)
  • Geoherna
    Geoherna almost 8 years
    You are a god...
  • Yogesh Yadav
    Yogesh Yadav almost 8 years
    Worked like a charm. I wish I could upvote it multiple times.
  • innovati
    innovati over 6 years
    Beautiful! I just set up a brand new Debian 9 server on Linode and need to run PHP5 for an app I'm working on. These instructions were perfect as of October 2017 😘👌 Thank you!
  • Abdulla Nilam
    Abdulla Nilam over 6 years
    vote you for the clear state of switching Apache and CLI
  • davidkonrad
    davidkonrad about 5 years
    Warning: Using this recipe trashed my entire PHP beyond repair. Hours lost. Using ubuntu 14.04. Just a reminder to you guys: Do not blindly copy paste CLI oneliners without knowing what you are doing!
  • Wolfack
    Wolfack over 4 years
    Great approach, helped me a lot.
  • variable
    variable over 2 years
    According to this link (askubuntu.com/a/306555/1516753) isn't it recommended to not install a previous version of PHP on a later version of OS? For example - Ubuntu 16.04 supports PHP 7+.
  • variable
    variable over 2 years
    According to this link (askubuntu.com/a/306555/1516753) isn't it recommended to not install a previous version of PHP on a later version of OS? For example - Ubuntu 16.04 supports PHP 7+.
  • variable
    variable over 2 years
    According to this link (askubuntu.com/a/306555/1516753) isn't it recommended to not install a previous version of PHP on a later version of OS? For example - Ubuntu 16.04 supports PHP 7+.