182

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
  • 3,489
  • I appear to have 5.6 installed but all my php is rendering as text now. – dibs Apr 24 '16 at 10:49
  • what the output of dpkg -l | grep php| awk '{print $2}' |tr "\n" " " ? – storm Apr 24 '16 at 10:57
  • 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 – dibs Apr 24 '16 at 11:05
  • 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 – storm Apr 24 '16 at 11:22
  • 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. – dibs Apr 24 '16 at 22:58
  • 2
    it means you miss libapache2-mod-php5.6 package ... see my answer below, you don't need to remove php7.0 – Postadelmaga Apr 25 '16 at 03:00
  • According to this link (https://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 Nov 03 '21 at 12:11

4 Answers4

342

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
      
mauxtin
  • 101
Postadelmaga
  • 5,689
  • I'll give this a go but are the two commands for switching versions supposed to be dismoding both versions of php each time? – dibs Apr 25 '16 at 03:04
  • 2
    you are right, thanks, I have fixed the commands :) – Postadelmaga Apr 25 '16 at 05:20
  • This appears to be the simplest way to deal with this. I like how you can toggle between versions of PHP too – dibs Apr 25 '16 at 21:19
  • 2
    @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? – John Linhart Apr 26 '16 at 13:39
  • 1
    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 https://disqus.com/home/discussion/serversforhackers/installing_php_7_with_memcached_servers_for_hackers/#comment-2590380342 – razor7 Apr 26 '16 at 14:46
  • 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 – toesslab May 06 '16 at 10:29
  • 7
    The post saved my day. – Shoaib Nawaz May 07 '16 at 11:39
  • 1
    @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. – Postadelmaga May 08 '16 at 00:43
  • After writing that comment, I realised that too. Sry I'm a linux newbie.... Thx for that great answer! – toesslab May 10 '16 at 10:09
  • 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... – ToX 82 May 17 '16 at 10:22
  • my guess is that you miss some php5.6 module try to compare phpinfo between php5.6 and php7.0, check the apache log. – Postadelmaga May 18 '16 at 02:39
  • 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 May 18 '16 at 06:44
  • For others, when using php7.0 and php5.6 in CLI without removing the native php7 install, php5.6 won't occur as a prompt but will still work. You can even use php5.6 -v to check – myol May 18 '16 at 16:02
  • @ToX82 try to uninstall any php (5.6/7) package and then follow the guide from scratch – Postadelmaga May 19 '16 at 03:15
  • @Postadelmaga, it worked by uninstalling both php and apache and reinstalling from scratch. Thanks! – ToX 82 May 19 '16 at 09:25
  • sudo ln -sfn /usr/bin/php5 /etc/alternatives/php is what I needed. – Jorge Orpinel Pérez Jul 16 '16 at 05:43
  • Some folks need to stop using php5 (vs 5.6) – Nick Jul 24 '16 at 03:41
  • You are a god... – Geoherna Sep 20 '16 at 18:22
  • 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! – innovati Oct 13 '17 at 22:24
  • vote you for the clear state of switching Apache and CLI – Abdulla Nilam Jan 04 '18 at 10:09
  • 1
    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! – davidkonrad Apr 07 '19 at 20:13
  • Great approach, helped me a lot. – Wolfack Jan 07 '20 at 11:11
  • According to this link (https://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 Nov 03 '21 at 12:11
  • @variable, look at this comment in response to your identical comment. – bballdave025 Jun 01 '23 at 23:29
52

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.

  • 1
    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. – Videonauth May 02 '16 at 10:30
  • 1
    This is the best answer for the ones willing to install both php5.6 and php7.0 on ubuntu 16.04 – Amine Jallouli May 14 '16 at 11:26
  • 1
    Worked like a charm. I wish I could upvote it multiple times. – Yogesh Yadav Sep 30 '16 at 20:32
  • According to this link (https://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 Nov 03 '21 at 12:11
  • Oh, @variable, wouldn't it be nice to stick with that recommendation! The problem is when you are at your job, and someone needs you to fix a web app that was written 5-6 years ago. Trying to rewrite everything in the latest php would take much longer than your boss is willing to pay you for. You have a family, so you don't have any time to "volunteer". That makes you grateful that people like Ondrej keep these PPAs up and running, so e.g. the Phalcon 5.4 that runs only on PHP 5.6 can be used, you rock it with the job you love, and your boss is happy with you. – bballdave025 Jun 01 '23 at 23:19
  • @variable, having said all that, it is always best to stick with the recommendation about the current software. A lot of times you can do so, but there will likely come times where it will be next to impossible. (You'll hear the word, legacy, and this kind of stuff will be useful.) – bballdave025 Jun 01 '23 at 23:20
12

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.

oerdnj
  • 7,940
6

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
ThunderBird
  • 1,955
  • I hope that the fact that you will remove your current php packages and install php freshly will be of great help to you. – ThunderBird Apr 24 '16 at 09:42
  • 3
    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. – oerdnj Apr 25 '16 at 10:09
  • According to this link (https://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 Nov 03 '21 at 12:11
  • @variable, look at this comment in response to your identical comment. – bballdave025 Jun 01 '23 at 23:30