在 Ubuntu 20.04 上更新 PHP 7.4 不会更新到最新版本

J. *_*Doe 7 php ubuntu php-7.4

我只是想在新的 Ubuntu 20.04 上安装 PHP 7.4,

做一个简单的apt install php php-cli安装默认7.4版本,

但是当我这样做时apt update && apt upgrade,版本仍然7.4.3不是7.4.5

请注意,我知道这可以通过添加ppa:ondrej/php存储库来解决。

我只是想了解,如果 Ubuntu 默认附带 7.4,为什么不更新到最新版本?即使在 2-3 年后,我们也会一直7.4.3使用 Ubuntu 20.04.0(不是下一个版本)吗?唯一的选择是添加ondrej/php存储库?

编辑:PHP 7.4.6 已于几周前发布,但我服务器上的版本仍停留在 7.4.3 上。

rmo*_*stl 12

之前接受的答案是错误的。

这种说法

某些软件包几个月后仍然过时是很常见的

给人的印象是,Ubuntu LTS 版本在 PHP 团队发布几个月后就不断升级到最新的次要版本。

这不是真的!

Ubuntu的更新政策

TL;DR Ubuntu 的官方打包 PHP 在安全方面是最新的,在错误修复方面是过时的。

以下是 Ubuntu / Canonical 实际维护 PHP 等官方软件包的方式:

当 Ubuntu 准备 LTS 版本时,会在某个时间点出现功能冻结详细信息)。这意味着即使打包软件在 Ubuntu 功能冻结之前和最终 LTS 发布之后发布了较新的次要版本(例如修复错误),该次要版本更新也不会再进入 Ubuntu。

对于 Ubuntu Focal Fossa 20.04 LTS,PHP 被冻结在版本 7.4.3。这意味着 Focal 的 php 软件包在其支持生命周期内将永远不会再获得次要版本更新(例如 7.4.6)。

然而,这并不意味着 Fossa 的 php 包永远不会得到更新。

SRU

事实恰恰相反:它将用这些所谓的稳定版本更新或短SRU进行修补。

那么 SRU 包含哪些内容呢?

主要修复影响较大的错误,这些错误在大多数情况下都归结为安全错误。请参阅SRU以了解 Ubuntu 认为影响较大的错误。

无论如何,您最终得到的是 Focal Fossa 在其整个生命周期中收到多个 PHP 7.4.3 补丁版本。换句话说,Focal Fossa 中存在多个 PHP 7.4.3 版本,正如您在软件包的更改日志中看到的那样。它显示了多个版本,例如、7.4.3-4ubuntu1等,您可以看到大多数安全错误都已修复。7.4.3-4ubuntu27.4.3-4ubuntu2.5

如何检查实际安装的是哪个版本?

问题是php -v总是会报告PHP 7.4.3。但是,请看一下输出的详细信息:PHP 7.4.3 (cli) (built: Jul 5 2021 15:13:35) ( NTS )。它于 2021 年 7 月 5 日构建,已经暗示看似旧的 7.4.3 版本发生了一些事情。

要真正确定安装的是哪个版本,请询问 apt: apt policy php7.4

输出:

适当的政策输出

在这种情况下7.4.3-4ubuntu2.5已安装。再次,查看包的更改日志以了解该版本中包含的内容。

影响 PHP 7.4 的所有安全错误都已修复吗?

是的。

PHP 7.4 ChangeLog相比,您会发现除一个(据我所知仅影响 Windows)之外的所有安全问题 (CVE) 都已在 Ubuntu 软件包中修复。除此之外,仅包含一些非安全错误修复。

Ubuntu 的安全团队正在密切跟踪CVE 数据库,并维护自己的Ubuntu CVE 跟踪器

你应该使用 Ubuntu 的官方 PHP 包吗?

这取决于你的情况。我倾向于说这是一个很好的默认值。

无论如何,您应该根据以下事实做出决定:

当您使用 Ubuntu 的官方 PHP 软件包时,您可以确定它将在实际 Ubuntu 版本的整个生命周期内收到安全更新(对于像 Focal Fossa 20.04 这样的 LTS 版本,则为 5 年)。即使 PHP 7.4 生命周期结束(2022 年底),Ubuntu 的安全团队仍会修补官方 php7.4 软件包。换句话说,即使 PHP 团队不再发布安全修复程序,Ubuntu 的安全团队也会发布。

相比之下,当您使用 Ondrej 的 PPA 之类的东西时,您必须在 2022 年底后切换到 PHP 8。如果不这样做,您的 PHP 将不再获得安全修复。

虽然 Ubuntu 的 php 软件包将获得安全修复,但它几乎不会获得其他类型的错误修复。要么你很幸运并且你的软件没有受到影响,要么你将不得不解决这些错误。如果错误严重影响您的软件(例如性能问题),您可以考虑切换到 PPA 包。

  • 感谢您非常详细的回答!我不知道这些修复,因为版本一直显示 7.4.3...现在我可以坚持使用 Ubuntu 的官方 PHP 包。希望在 22.04 的功能冻结之前,PHP 8.1 也收到了一些非安全错误修复,并且可以在那里更可靠地使用。 (2认同)

Eli*_*res 6

Ubuntu 官方存储库显示 7.4.3 是最新的可用版本。所以这不是@blizzo 建议的 apt 或缓存问题。

由于我们谈论的是 Ubuntu 的 LTS 版本,因此由于稳定性原因,某些软件包会过时几个月是很常见的。(即使是补丁版本也可能会引入一些让人觉得不可靠的错误,而 LTS 旨在非常稳定和可行)

正如您在原始问题上所写,最好的解决方案是使用ondrej/php存储库。

编辑:

我询问了 ondrej,他用这个链接轻轻地回答:https : //wiki.ubuntu.com/StableReleaseUpdates说:

一旦完成并发布了 Ubuntu 版本,它的更新仅在某些情况下发布,并且必须遵循称为“稳定版本更新”或 SRU 的特殊程序。

2.什么时候

2.1. 高影响错误

通常,稳定版本更新只会发布以修复影响较大的错误。

2.2. 其他安全案例

...


Sar*_*gam 5

请使用以下代码更新 php 7.4.15

  sudo add-apt-repository ppa:ondrej/php
  
  sudo apt-get update
  
  sudo apt-get install -y php7.4 php7.4-cli php7.4-common php7.4-fpm

  sudo apt-get install -y php7.4-mysql php7.4-dom php7.4-simplexml php7.4-ssh2 php7.4-xml php7.4-xmlreader php7.4-curl  php7.4-exif  php7.4-ftp php7.4-gd  php7.4-iconv php7.4-imagick php7.4-json  php7.4-mbstring php7.4-posix php7.4-sockets php7.4-tokenizer

  sudo apt-get install -y php7.4-mysqli php7.4-pdo  php7.4-sqlite3 php7.4-ctype php7.4-fileinfo php7.4-zip php7.4-exif

   sudo nano /etc/php/7.4/fpm/php.ini
   
              Find: cgi.fix_pathinfo  => Remove semi-colon and set 0

              cgi.fix_pathinfo=0
Run Code Online (Sandbox Code Playgroud)

保存并退出

php -v

您的 php 版本已更新。