在 Ubuntu 20.04 上更新 PHP 7.4 不会更新到最新版本
Updating PHP 7.4 on Ubuntu 20.04 doesn't update to the latest release
我只是想在新 Ubuntu 20.04 上安装 PHP 7.4,
做一个简单的apt install php php-cli
默认安装7.4版本,
但是当我 apt update && apt upgrade
时版本仍然是 7.4.3
而不是 7.4.5
!
Please note that I'm aware this can be fixed by adding ppa:ondrej/php
repository.
我只是想了解,如果 Ubuntu 默认附带 7.4,为什么不更新到最新版本?即使在 2-3 年后,我们是否总是会在 Ubuntu 20.04.0(不是下一个版本)中获得 7.4.3
?唯一的选择是添加 ondrej/php
存储库?
编辑:PHP 7.4.6 几周前发布了,但我服务器上的版本仍然停留在 7.4.3。
这可能是 apt
的问题。无论出于何种原因,apt update && apt upgrade
看起来都指向该软件的旧版本。如果绝对有必要,您可能确实需要通过 GitHub 或其他一些受信任的来源手动安装最新的 PHP 版本。
Ubuntu official repository 表明 7.4.3 是最新的可用版本。所以这不是 @blizzo 所建议的 apt 或缓存的问题。
由于我们谈论的是 Ubuntu 的 LTS 版本,因此出于稳定性原因,某些软件包通常会过时几个月。 (即使是补丁版本也会引入让 thinks unreality 不可靠的错误,而 LTS 意味着非常稳定和可靠)
正如您在原始问题上所写,最好的解决方案是使用 ondrej/php
存储库。
编辑:
我问过 ondrej,他用这个 link 轻轻地回答:https://wiki.ubuntu.com/StableReleaseUpdates 说:
Once an Ubuntu release has been completed and published, updates for it are only released under certain circumstances, and must follow a special procedure called a "stable release update" or SRU.
2. When
2.1. High-impact bugs
Stable release updates will, in general, only be issued in order to fix high-impact bugs.
2.2. Other safe cases
...
请使用以下代码更新 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
保存并退出
php-v
您的 php 版本已更新。
请注意,这可能会毁了一切。我一直在使用 Ubuntu 附带的 PHP 7.4.3。我添加 ppa:ondrej/php
的体验并不好。
apt upgrade
首先要我安装 PHP 7.4 和 PHP 8.0。然后它使 PHP 8.0 成为默认值,并希望我 运行 apt autoremove
摆脱重复的 PHP 7.4 安装。
重新启动 Apache 导致它因错误而失败并关闭了我的所有网站。
apt install libapache2-mod-php7.4
是恢复服务器所必需的,现在显示 PHP 7.4.16,但我的所有网站都抛出服务器错误,表明我的 PHP none扩展被安装了。重新安装 PHP 7.4 的所有扩展后,又一次 Apache 重启恢复了我的网站。
update-alternatives --config php
还帮助将 CLI 版本重置回 7.4.16。
发现这个问题和 none 的答案对我有用,有用的是:
sudo a2dismod php7.2
sudo a2enmod php7.4
sudo service apache2 restart
根据您当前的模块php7.2
调整
之前接受的是错误的
这个声明
it's common that some packages remain outdated for a few months
给人的印象是 Ubuntu LTS 版本在 PHP 团队发布几个月后不断升级到最新的次要版本。
这不是真的!
Ubuntu的更新政策
TL;DR Ubuntu 的官方打包 PHP 是最新的安全明智和过时的错误修复-明智的。
这里是 Ubuntu / Canonical 实际维护官方软件包的方式 PHP:
当 Ubuntu 准备 LTS 版本时,功能冻结 (details) 在某个时间点。这意味着即使打包软件在 Ubuntu 的功能冻结之前和最终的 LTS 版本之后发布了更新的次要版本(例如修复错误),这个次要版本更新也不会进入 Ubuntu 了。
在 Ubuntu Focal Fossa 20.04 LTS 的情况下,PHP 在版本 7.4.3 中被冻结。这意味着 Focal 的 php 软件包在其支持生命周期内将永远不会再获得次要版本更新(例如 7.4.6)。
然而,这并不意味着 Fossa 的 php 软件包永远不会得到更新。
SRU
事实恰恰相反:它将使用这些所谓的 稳定版本更新 或简短 SRUs.
进行修补
那么什么进入 SRU?
主要修复 高影响错误,这些错误大多数时候归结为安全错误。请参阅 SRUs 以了解 Ubuntu 认为影响很大的错误。
无论如何,你最终得到的是 Focal Fossa 在其整个生命周期中收到 PHP 7.4.3 的多个补丁版本。换句话说,Focal Fossa 中存在多个 PHP 7.4.3 版本,如您在软件包 change log 中所见。
它显示多个版本,如 7.4.3-4ubuntu1
、7.4.3-4ubuntu2
、7.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
。再次查看包的 change log 以查看该构建中包含的内容。
是否所有影响 PHP 7.4 的安全漏洞都已修复?
是的。
与 PHP 7.4 ChangeLog 相比,您会发现除一个(afaik 仅 Windows 受影响)之外的所有安全问题 (CVE) 都已在 Ubuntu 包中修复。除此之外,仅包含一些非安全错误修复。
Ubuntu 的安全团队密切 tracking the CVE database and maintains its own Ubuntu CVE tracker.
你应该使用 Ubuntu 的官方 PHP 包吗?
这取决于你的情况。我倾向于说这是一个很好的默认值。
无论如何,您应该根据以下事实做出决定:
当您使用 Ubuntu 的官方 PHP 包时,您可以确定它会在实际 Ubuntu 版本的整个生命周期内收到安全更新(5 年例如 Focal Fossa 20.04 这样的 LTS 版本)。即使 PHP 7.4 生命周期结束(2022 年底),Ubuntu 的安全团队仍将修补官方 php7.4 软件包。换句话说,即使 PHP 团队不再发布安全修复程序,Ubuntu 的安全团队也会发布。
相比之下,当您使用 Ondrej 的 PPA 之类的东西时,您必须在 2022 年底后切换到 PHP 8。如果不这样做,您的 PHP 将不再获得安全修复。
虽然 Ubuntu 的 php 软件包将获得安全修复,但几乎不会获得其他类型的错误修复。要么你很幸运并且你的软件没有受到影响,要么你将不得不解决这些错误。如果一个 bug 严重影响了你的软件(例如性能问题),你可以考虑切换到 PPA 包。
我只是想在新 Ubuntu 20.04 上安装 PHP 7.4,
做一个简单的apt install php php-cli
默认安装7.4版本,
但是当我 apt update && apt upgrade
时版本仍然是 7.4.3
而不是 7.4.5
!
Please note that I'm aware this can be fixed by adding
ppa:ondrej/php
repository.
我只是想了解,如果 Ubuntu 默认附带 7.4,为什么不更新到最新版本?即使在 2-3 年后,我们是否总是会在 Ubuntu 20.04.0(不是下一个版本)中获得 7.4.3
?唯一的选择是添加 ondrej/php
存储库?
编辑:PHP 7.4.6 几周前发布了,但我服务器上的版本仍然停留在 7.4.3。
这可能是 apt
的问题。无论出于何种原因,apt update && apt upgrade
看起来都指向该软件的旧版本。如果绝对有必要,您可能确实需要通过 GitHub 或其他一些受信任的来源手动安装最新的 PHP 版本。
Ubuntu official repository 表明 7.4.3 是最新的可用版本。所以这不是 @blizzo 所建议的 apt 或缓存的问题。
由于我们谈论的是 Ubuntu 的 LTS 版本,因此出于稳定性原因,某些软件包通常会过时几个月。 (即使是补丁版本也会引入让 thinks unreality 不可靠的错误,而 LTS 意味着非常稳定和可靠)
正如您在原始问题上所写,最好的解决方案是使用 ondrej/php
存储库。
编辑:
我问过 ondrej,他用这个 link 轻轻地回答:https://wiki.ubuntu.com/StableReleaseUpdates 说:
Once an Ubuntu release has been completed and published, updates for it are only released under certain circumstances, and must follow a special procedure called a "stable release update" or SRU.
2. When
2.1. High-impact bugs
Stable release updates will, in general, only be issued in order to fix high-impact bugs.
2.2. Other safe cases
...
请使用以下代码更新 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
保存并退出
php-v
您的 php 版本已更新。
请注意,这可能会毁了一切。我一直在使用 Ubuntu 附带的 PHP 7.4.3。我添加 ppa:ondrej/php
的体验并不好。
apt upgrade
首先要我安装 PHP 7.4 和 PHP 8.0。然后它使 PHP 8.0 成为默认值,并希望我 运行 apt autoremove
摆脱重复的 PHP 7.4 安装。
重新启动 Apache 导致它因错误而失败并关闭了我的所有网站。
apt install libapache2-mod-php7.4
是恢复服务器所必需的,现在显示 PHP 7.4.16,但我的所有网站都抛出服务器错误,表明我的 PHP none扩展被安装了。重新安装 PHP 7.4 的所有扩展后,又一次 Apache 重启恢复了我的网站。
update-alternatives --config php
还帮助将 CLI 版本重置回 7.4.16。
发现这个问题和 none 的答案对我有用,有用的是:
sudo a2dismod php7.2
sudo a2enmod php7.4
sudo service apache2 restart
根据您当前的模块php7.2
调整
之前接受的
这个声明
it's common that some packages remain outdated for a few months
给人的印象是 Ubuntu LTS 版本在 PHP 团队发布几个月后不断升级到最新的次要版本。
这不是真的!
Ubuntu的更新政策
TL;DR Ubuntu 的官方打包 PHP 是最新的安全明智和过时的错误修复-明智的。
这里是 Ubuntu / Canonical 实际维护官方软件包的方式 PHP:
当 Ubuntu 准备 LTS 版本时,功能冻结 (details) 在某个时间点。这意味着即使打包软件在 Ubuntu 的功能冻结之前和最终的 LTS 版本之后发布了更新的次要版本(例如修复错误),这个次要版本更新也不会进入 Ubuntu 了。
在 Ubuntu Focal Fossa 20.04 LTS 的情况下,PHP 在版本 7.4.3 中被冻结。这意味着 Focal 的 php 软件包在其支持生命周期内将永远不会再获得次要版本更新(例如 7.4.6)。
然而,这并不意味着 Fossa 的 php 软件包永远不会得到更新。
SRU
事实恰恰相反:它将使用这些所谓的 稳定版本更新 或简短 SRUs.
进行修补那么什么进入 SRU?
主要修复 高影响错误,这些错误大多数时候归结为安全错误。请参阅 SRUs 以了解 Ubuntu 认为影响很大的错误。
无论如何,你最终得到的是 Focal Fossa 在其整个生命周期中收到 PHP 7.4.3 的多个补丁版本。换句话说,Focal Fossa 中存在多个 PHP 7.4.3 版本,如您在软件包 change log 中所见。
它显示多个版本,如 7.4.3-4ubuntu1
、7.4.3-4ubuntu2
、7.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
。再次查看包的 change log 以查看该构建中包含的内容。
是否所有影响 PHP 7.4 的安全漏洞都已修复?
是的。
与 PHP 7.4 ChangeLog 相比,您会发现除一个(afaik 仅 Windows 受影响)之外的所有安全问题 (CVE) 都已在 Ubuntu 包中修复。除此之外,仅包含一些非安全错误修复。
Ubuntu 的安全团队密切 tracking the CVE database and maintains its own Ubuntu CVE tracker.
你应该使用 Ubuntu 的官方 PHP 包吗?
这取决于你的情况。我倾向于说这是一个很好的默认值。
无论如何,您应该根据以下事实做出决定:
当您使用 Ubuntu 的官方 PHP 包时,您可以确定它会在实际 Ubuntu 版本的整个生命周期内收到安全更新(5 年例如 Focal Fossa 20.04 这样的 LTS 版本)。即使 PHP 7.4 生命周期结束(2022 年底),Ubuntu 的安全团队仍将修补官方 php7.4 软件包。换句话说,即使 PHP 团队不再发布安全修复程序,Ubuntu 的安全团队也会发布。
相比之下,当您使用 Ondrej 的 PPA 之类的东西时,您必须在 2022 年底后切换到 PHP 8。如果不这样做,您的 PHP 将不再获得安全修复。
虽然 Ubuntu 的 php 软件包将获得安全修复,但几乎不会获得其他类型的错误修复。要么你很幸运并且你的软件没有受到影响,要么你将不得不解决这些错误。如果一个 bug 严重影响了你的软件(例如性能问题),你可以考虑切换到 PPA 包。