在升级至Ubuntu 18.04后,无法安装php7.2-curl。

31

今天使用do-release-upgrade -d从16.04升级到了18.04。

升级过程中,我被告知某些软件包将被删除,其中包括:

删除:libperl5.22 lxc-common perl-modules-5.22 php-imagick
php7.1-curl php7.2-curl python3-certbot-nginx

我可以轻松重新安装imagick和certbot,但如果我尝试安装php7.2-curl,则会收到以下消息:

# apt install php7.2-curl -y
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 php7.2-curl : Depends: php7.2-common (= 7.2.3-1ubuntu1) but 7.2.4-1+ubuntu16.04.1+deb.sury.org+1 is to be installed
E: Unable to correct problems, you have held broken packages.

我该如何纠正这个情况?


尝试安装旧版本时,请使用命令“sudo apt-get install curl”。 - user9487972
1
curl 和 php-curl 不是同一件事。我已经更新了所有的 php7.2 包,但由于版本依赖关系不正确(我想),php7.2-curl 被拦截了。@smith,我不确定你是否在正确的轨道上。 - Arni J
1
升级后,您必须再次从ondrej添加软件包“add-apt-repository ppa:ondrej/php”,然后只需运行“apt-get update”和“apt-get upgrade”。 - RlDDlCK
4个回答

78

这可以帮助你节省:

sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php7.2-fpm php7.2-gd php7.2-curl php7.2-mysql php7.2-dev php7.2-cli php7.2-common php7.2-mbstring php7.2-intl php7.2-zip php7.2-bcmath

然后执行 sudo service apache2 restart


为什么要安装旧版本的curl?它在Bionic中打包的是7.58。 - user9487972
2
这个方法很管用。我的PPA仍然存在,但是针对Bionic版本。因此,重新添加我的PPA并执行apt update/upgrade,然后安装php7.2-curl将我恢复到了一个良好的状态 :) - Arni J
请重启服务器: sudo service apache2 restart - Selvesan Malakar
谢谢,你节省了我的时间。 - Ankur Tiwari
这正是我所需要的,以获取所有必要的PHP扩展。谢谢。 - Jeremi
显示剩余2条评论

3

您不需要添加新的仓库。只需执行以下操作,即可安装7.2版本。记得在之后重新启动php和apache。还要确保(尽管您可能已经完成了这个步骤),启用新的模块:

sudo apt install php-curl
sudo a2enmod php7.2

你可能会注意到,在安装php-curl(它安装了php-curlphp7.2-curl)的最后,会出现以下内容(请注意,我已经设置了FPM,如果您没有使用FPM,则可能看起来不同):

NOTICE: Not enabling PHP 7.2 FPM by default.
NOTICE: To enable PHP 7.2 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php7.2-fpm
NOTICE: You are seeing this message because you have apache2 package installed.

所以按照它所说的去做:

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.2-fpm
sudo systemctl restart apache2.service

有人能解释一下为什么这个被踩了,以及为什么它不起作用吗?别误会,我也会踩的,但它似乎应该可以工作……只是它没有。我点赞 Anson Wong 的答案,因为在尝试这种方法后,这让我成功了,这似乎是恢复模块最可能的方法。我忽略了 Apache 的东西,因为我正在运行 Nginx,但这似乎是一个变化,比从 PPA 安装更好。 - rubynorails
1
感谢您的升级到18.04,我的nginx被设置为使用php7.0-fpm,但没有加载php_curl,尽管它已经安装并在php.ini中引用。最终我升级到了php7.2-fpm,问题得到了解决。 - alexg
我点了踩因为这个问题与Apache无关。 而且我不知道答案发布的时间,但现在,“sudo apt install php-curl”绝对不会安装php7.2-curl(目前是7.3)。在我的情况下,我需要一个命令行php脚本能够在Apache运行在php7.3上时运行php7.2-curl。 - Auspex

0

对我来说,安装libcurl4是有效的,使用以下命令:

apt install libcurl4

然后安装了php7.2-curl,重新启动apache2没有问题。

-1

你需要以成熟的方式处理。安装aptitude,这个Ubuntu软件包管理器将找到所有依赖项,并逐一安装。

apt-get install aptitude

现在你需要检查aptitude是否可以下载它,如果可以下载,请按照说明进行操作。

sudo aptitude install php7.2-curl

如果您遇到了类似这样的错误

E: Unable to locate package php7.2-curl
E: Couldn't find any package by glob 'php7.2-curl'

我不是在谈论正确的错误类型

尝试再次添加PHP包

sudo apt-add-repository ppa:ondrej/php

sudo apt-get update

现在尝试执行这个命令

sudo aptitude install php7.2-curl

Aptitude 会询问您是否要保留所有依赖项的当前版本

The following actions will resolve these dependencies:

     Keep the following packages at their current version:
1)     php7.2-curl [Not Installed]                        



Accept this solution? [Y/n/q/?]

输入n,然后按Enter

Aptitude将查找所有依赖项,并要求您安装所有软件包类型。

y

再次

y

那么

systemctl restart apache2

对于CentOS或RHEL

systemctl restart httpd

默认情况下不会启用PHP 7.2 FPM。 注意:要在Apache2中启用PHP 7.2 FPM,请执行以下操作

a2enmod proxy_fcgi setenvif

a2enconf php7.2-fpm

这种方法不仅适用于此错误,您可以使用aptitude找到任何php apache2或ubuntu系统包解决方案。

Upvote if you find your solution

请在检查问题的上下文后,不要在不同的问题下发布相同的答案。毕竟,问题中的错误看起来并不像您在此回答中提到的那个。 - Nico Haase

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接