设置 Ubuntu 16.04 虚拟主机时,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
到我的网站。
我会把我的答案分成两部分。第一部分描述您的问题是如何发生的,第二部分是您问题的实际答案。
描述
免责声明:我的大部分描述基本上都是猜测,因为我真的不知道你做了什么。但这是最有可能发生的情况,因为我想不出另一种方式最终会给您带来您所描述的问题。
从您描述的问题来看,您似乎已经安装了第三方 PPA,它在您的系统上安装了 PHP 7.1。最有可能的 PPA 是Ondrej 的 PPA。
当你第一次安装 PHP 时,你是按以下方法安装的:
该
php
包只是一个元包,不包含所需的二进制文件。它取决于可用 PHP 包的最新版本(默认为 7.0)。因此,当您安装它时,该php7.0
软件包将与php7.0
的依赖项(libapache2-mod-php7.0
如果您有apache2
)一起安装,并且所有这些依赖项都在包管理器中标记为“自动安装”。我将命令结果的部分加粗,这解释了我刚才提到的内容。
Ondrej 的 PHP PPA 提供了多个 PHP 版本,可以相互安装。因此,当您将它添加到您的系统时,
apt
发现了一个较新版本的 PHP,因此它替换了php7.0
*php7.1
以及自动安装的任何相关软件包。回答
有两种方法可以解决您的问题。
完全删除第 3 方 PPA,并恢复为默认 PHP 包
Ondrej 的 PPA 提供多个版本的 PHP,因此您可以同时安装多个版本。但是您只能启用
php7.0
Apache 模块。以以前的方式安装它们会将
php7.0
包设置为“手动安装”apt
,因此如果您不自己删除它们,它们将不会被自动删除。 不要忘记确保安装 php7.0 所需的任何 PHP 模块(如sudo apt install php7.0-mysql
)*
php7.0
如果您手动安装了专门用于 php7.0 的模块(例如php7.0-mysql
),则可能已安装在您的系统中。通过在packages.ubuntu.com中搜索该文件
libphp7.0
,我找到了两个包含该文件的包。是否安装了一个或两个?libapache2-mod-php7.0
和/或libphp7.0-embed
?重新
libapache2-mod-php7.0
安装然后看看包里有什么要读的。列出内容
搜索结果: