设置 Ubuntu 16.04 vhost 时,Apache 将使用 PHP 7.0.22-2+ubuntu16.04.1+deb.sury.org+4。
然而,在尝试通过以下方式解决一些冲突apt-get dist-upgrade
(并失败)后,我最终得到了一个严重损坏的系统。从那时起,我设法将大多数软件包版本回滚到默认版本,但 Apache 使用
PHP 7.1.8-2+ubuntu16.04.1+deb.sury.org+4,这与我需要的一些 PHP 库不兼容。
到目前为止,我已经尝试过:
sudo a2dismod php7.1
sudo a2enmod php7.0
sudo service apache2 restart
但是,这会破坏 Apache 并且它拒绝重新启动:
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
如何让 Apache 再次运行默认 PHP 版本(PHP 7.0)?
编辑:下面是我对我的自我回答的评论(现已删除),担 让我意识到添加以下第三方 PPAppa:ondrej/php
可能与该问题有关。
所以:
我已将 PPA 添加ppa:ondrej/php
到我的网站。
答案1
我将我的回答分为两部分。第一部分描述您的问题是如何发生的,第二部分是针对您的问题的实际答案。
描述
免责声明:我的大部分描述基本上都是推测,因为我无法真正知道你做了什么。但这是最有可能的情况,因为我无法想到其他可能导致你所描述的问题的方法。
从您描述的问题来看,您似乎安装了第三方 PPA,该 PPA 在您的系统上安装了 PHP 7.1。最有可能的 PPA 是Ondrej 的 PPA。
首次安装PHP时,按照以下方式安装:
sudo apt install php
该php
包只是一个元包,不包含所需的二进制文件。它依赖于可用 PHP 包的最新版本(默认为 7.0)。因此,当您安装它时,包会与的依赖项php7.0
一起安装(如果您有),并且所有这些依赖项在包管理器中都标记为“自动安装”。php7.0
libapache2-mod-php7.0
apache2
$ apt 显示 php 软件包:php 版本:1:7.0+35ubuntu6 优先级:可选 部分:php 来源:php-defaults (35ubuntu6) 起源:Ubuntu 维护者:Ubuntu 开发人员 原始维护者:Debian PHP 维护者 错误:https://bugs.launchpad.net/ubuntu/+filebug 安装大小:11.3 kB 依赖:php7.0 支持时间:5 年 下载大小:2,832 B APT-手动安装:是 APT 来源:http://archive.ubuntu.com/ubuntu xenial/main amd64 软件包 描述:服务器端,HTML 嵌入式脚本语言(默认) PHP(PHP 的递归缩写:超文本预处理器)是一种广泛使用的 开源通用脚本语言,特别适合 用于Web开发并可嵌入到HTML中。 。 此包为依赖包,依赖于 Debian 默认的 PHP 版本(目前为 7.0)。
我将命令结果的部分内容加粗,以解释我刚才提到的内容。
Ondrej 的 PHP PPA 提供多个 PHP 版本,可以同时安装。因此,当您将其添加到系统时,apt
会发现较新版本的 PHP,因此它会将php7.0
* 替换为php7.1
以及自动安装的任何相关软件包。
回答
有两种方法可以解决您的问题。
完全删除第三方 PPA,并恢复为默认 PHP 包
sudo apt install ppa-purge sudo ppa-purge ppa:ondrej/php
Ondrej 的 PPA 提供多个版本的 PHP,因此您可以同时安装多个版本。但您只能启用
php7.0
Apache 模块。sudo apt install php7.0 libapache2-mod-php7.0 sudo a2dismod php7.1 sudo a2enmod php7.0 sudo apache2ctl restart
以以前的方式安装它们会将
php7.0
包设置为“手动安装”apt
,因此除非您亲自删除它们,否则它们不会被自动删除。 不要忘记安装 php7.0 所需的所有 PHP 模块(例如sudo apt install php7.0-mysql
)
*php7.0
可能已保留在您的系统中安装如果您手动安装了专门针对 php7.0 的模块(例如php7.0-mysql
)。
答案2
通过搜索packages.ubuntu.com对于文件libphp7.0
,我找到了两个包含该文件的软件包。是否安装了其中一个或两个? libapache2-mod-php7.0
和/或libphp7.0-embed
?
重新libapache2-mod-php7.0
安装
sudo apt install --reinstall libapache2-mod-php7.0
然后看看包裹里有什么可读的。列出包裹里的内容
dpkg -L libapache2-mod-php7.0
搜索结果:
» 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