How can I get Apache to use PHP 7.0 (not 7.1)?
Solution 1
I'll split my answer into two parts. The first part describes how your problem occurred, the second part is the actual answer to your issue.
Description
Disclaimer: Most of my description is basically speculation, as I cannot really know what you did. But it's the most likely scenario, as I cannot think of another way that would end up giving you the issue you described.
From the problem you describe, it seems you have installed a third party PPA which installed PHP 7.1 on your system. The most likely PPA is Ondrej's PPA.
When you first installed PHP, you installed in the following method:
sudo apt install php
The php
package is only a meta package and does not contain the binaries needed. It depends on the latest version of the available PHP package (by default 7.0). So when you install it, the php7.0
package is installed along with php7.0
's dependencies (and libapache2-mod-php7.0
if you have apache2
) and all those dependencies are marked in the package manager as "automatically installed".
$ apt show php Package: php Version: 1:7.0+35ubuntu6 Priority: optional Section: php Source: php-defaults (35ubuntu6) Origin: Ubuntu Maintainer: Ubuntu Developers Original-Maintainer: Debian PHP Maintainers Bugs: https://bugs.launchpad.net/ubuntu/+filebug Installed-Size: 11.3 kB Depends: php7.0 Supported: 5y Download-Size: 2,832 B APT-Manual-Installed: yes APT-Sources: http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages Description: server-side, HTML-embedded scripting language (default) PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. . This package is a dependency package, which depends on Debian's default PHP version (currently 7.0).
I bolded the parts of the command's result, which explains what I just mentioned.
Ondrej's PHP PPA offers multiple PHP versions that can be installed alongside each other. So when you added it your system, apt
found a newer version of PHP so it replaced php7.0
* with php7.1
along with any related packages that were automatically installed.
Answer
There are two methods to fix your issues.
-
Completely remove the 3rd party PPA, and revert back to the default PHP packages
sudo apt install ppa-purge sudo ppa-purge ppa:ondrej/php
-
Ondrej's PPA offers multiple versions of PHP, so you can install more than one version along side each other. But you would enable only the
php7.0
Apache module.sudo apt install php7.0 libapache2-mod-php7.0 sudo a2dismod php7.1 sudo a2enmod php7.0 sudo apache2ctl restart
Installing them in the previous manner would set the
php7.0
package as "manually installed" inapt
, so they won't get removed automatically without you removing them yourself. Don't forget to make sure to install any PHP modules you need for php7.0 as well (Likesudo apt install php7.0-mysql
)
* php7.0
may have been kept in your system installed if you had manually installed a module specifically for php7.0 (for example php7.0-mysql
).
Solution 2
By searching packages.ubuntu.com for the file libphp7.0
, I found two packages containing that file. Is either or both installed? libapache2-mod-php7.0
and/or libphp7.0-embed
?
Reinstalling libapache2-mod-php7.0
with
sudo apt install --reinstall libapache2-mod-php7.0
then see what there is to read in the package. List the contents with
dpkg -L libapache2-mod-php7.0
The search results:
» Ubuntu » Packages » Package Contents Search Results
Search for libphp7.0.so within filenames
Search for paths ending with libphp7.0.so
Search in other suite: [trusty] [xenial] [yakkety] [zesty] [artful]
Limit search to a specific architecture: [amd64] [arm64] [armhf] [i386] [powerpc] [ppc64el] [s390x]
You have searched for files named libphp7.0.so in suite yakkety, all sections, and all architectures. Found 2 results.
File Packages
/usr/lib/apache2/modules/libphp7.0.so libapache2-mod-php7.0
/usr/lib/libphp7.0.so libphp7.0-embed
![Free Radical](https://i.stack.imgur.com/aniCZ.png?s=256&g=1)
Free Radical
Κυνικό φιλόσοφο. I am a maverick. This is not a choice, it is a creed. All content, including code snippets, I post on any StackExchange site are dual-licensed under SE's license (CC BY-SA) and the terms of the MIT/Expat license. If the material you reuse is used in a computer program, to the greatest extent permitted by applicable law, I also waive the right of attribution, and requirement that a copyright notice and a permission notice shall be included in the program.
Updated on September 18, 2022Comments
-
Free Radical almost 2 years
When setting up a Ubuntu 16.04 vhost, Apache will use PHP 7.0.22-2+ubuntu16.04.1+deb.sury.org+4.
However, after trying to resolve some conflicts by doing
apt-get dist-upgrade
(and failing), I ended up with a badly broken system. I've since managed to roll back most package versions to those that are default, but Apache uses PHP 7.1.8-2+ubuntu16.04.1+deb.sury.org+4, which is incompatible with some PHP-libraries I need.So far, I've tried:
sudo a2dismod php7.1 sudo a2enmod php7.0 sudo service apache2 restart
However, this breaks Apache and it refuses to restart:
Syntax error on line 140 of /etc/apache2/apache2.conf: Syntax error on line 3 of /etc/apache2/mods-enabled/php7.0.load: Cannot load /usr/lib/apache2/modules/libphp7.0.so
How can I get Apache to run the default PHP version (PHP 7.0) again?
Edit: A comment to my [now redacted] self-answer below by Dan made me realize that having added the following third party PPA
ppa:ondrej/php
may have something do do with the problem.So:
I have added the PPAppa:ondrej/php
to my site.-
pa4080 almost 7 yearsYou can try to reinstall he module:
sudo apt install --reinstall libapache2-mod-php7.0
.
-
-
Free Radical almost 7 yearsI went for solution 1 (completely remove the 3rd party PPA). Then I purged and reinstalled PHP 7.0 from the offical sources. Things are now back to normal.Thanks a lot!
-
Jeevan Takhar over 6 years
libapache2-mod-php7.0
was missing after compiling Apache from source. Runningapt-get install libapache2-mod-php7.0
solved this for me. -
centurian over 5 yearsMethod 1 did it's magic! Thanks!