You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu系统下如何将PHP锁定至7.4版本并解决锁定失效问题

Ubuntu系统下如何将PHP锁定至7.4版本并解决锁定失效问题

我来帮你梳理下问题所在,以及正确的版本锁定方法:

一、为什么你的apt preferences配置失效了?

你之前只锁定了php这个包,但实际上php是个虚拟包——它本身不对应具体的安装文件,只是一个指向实际PHP版本包的“别名”。真正决定PHP版本的是php7.4-cli、php7.4-common这类具体的软件包,还有你可能安装的各种扩展(比如php7.4-mysql、php7.4-gd)。所以只锁定php虚拟包,根本无法阻止系统更新到更高版本的PHP。

二、正确的apt preferences配置方法(推荐,允许7.4系列小版本更新)

如果你想保持在PHP7.4系列,同时还能接收7.4.x的安全小更新,推荐用下面的配置修改/etc/apt/preferences:

打开文件:

sudo vi /etc/apt/preferences

添加以下内容:

# 锁定所有php7.4相关包到7.4.*版本
Package: php7.4*
Pin: version 7.4.*
Pin-Priority: 1000

# 锁定核心PHP相关包到7.4兼容版本
Package: php-common php-cli php-fpm php-cgi
Pin: version 7.4.*
Pin-Priority: 1000
  • Pin-Priority: 1000表示强制优先安装指定版本,不会被更高版本(比如8.x)替代
  • 通配符php7.4*会覆盖所有以php7.4开头的扩展包,确保它们都保持和7.4兼容的版本

配置完成后,运行以下命令测试:

sudo apt update && sudo apt full-upgrade

之后用php -v检查,版本应该还是停留在7.4.x系列。

三、更简单的apt-mark hold方法(完全锁定当前版本,不接受小更新)

如果你想完全固定当前安装的PHP7.4具体版本(比如7.4.33),连小版本更新都不想接收,可以用apt-mark hold命令:

首先查看当前已安装的所有php7.4相关包:

dpkg -l | grep php7.4

然后把这些包全部锁定:

sudo apt-mark hold $(dpkg -l | grep php7.4 | awk '{print $2}')

这条命令会自动提取所有php7.4相关的包名并标记为“hold”,之后系统就不会再更新这些包了。

两种方法的区别

  • apt preferences:允许7.4系列内的小版本升级(比如7.4.33→7.4.34),同时阻止升级到8.x版本,适合需要保持安全更新的场景
  • apt-mark hold:完全锁定当前安装的具体版本,任何更新都不会进行,适合需要绝对固定版本的场景

四、验证锁定是否生效

可以用apt policy命令查看包的锁定状态,比如:

apt policy php7.4-cli

如果输出里显示Pin: version 7.4.*且优先级为1000,或者显示hold状态,就说明锁定成功了。

备注:内容来源于stack exchange,提问作者timppu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 11:27:41