PHP 5.6 已被禁止使用,因其自2018年12月起终止所有支持,存在未修复CVE漏洞、主流框架弃用、系统仓库下架、TLS握手失败等问题;新项目应选PHP 8.2或8.3,老项目至少升至8.0+。

PHP 5.6 已彻底淘汰,新项目必须用 PHP 8.2 或 8.3,老项目升级优先到 8.0+;PHP 5.6 绝对不要在任何环境(包括本地开发)中启用。
为什么 PHP 5.6 现在连“不推荐”都不够,而是“禁止使用”?
PHP 官方早在 2018 年 12 月就终止了对 PHP 5.6 的所有支持(包括安全更新),这意味着:
- 所有已知 CVE 漏洞(如远程代码执行、信息泄露类)都不会再修复
- 主流框架(Laravel、Symfony、ThinkPHP)早已移除兼容层,
composer install直接报错 - Ubuntu/Debian 等发行版的官方仓库已下架
php5.6包,APT 安装会失败或只能靠陈旧 PPA - 哪怕你只是本地跑个 demo,
openssl、curl等扩展在 5.6 下无法正确处理 TLS 1.2+ 握手,调第三方 API(微信、支付宝、Stripe)大概率失败
PHP 8.0 vs 8.2 vs 8.3:选哪个?关键看部署环境和框架支持
不是“越新越好”,而是“在能稳定运行的前提下选最新受支持版本”:
-
PHP 8.0:最低门槛,ThinkPHP 8.0、Laravel 9+、Symfony 6+都明确支持;但 JIT 编译器默认关闭,且部分Attribute语法支持不完整 -
PHP 8.2:当前 Ubuntu 22.04 LTS 默认源提供版本,长期支持更稳;mbstring、json扩展行为更严格(比如json_decode(null, true)报 Warning),适合中大型生产项目 -
PHP 8.3:2023 年底发布,2025 年已是主流选择;新增#[\Override]、只读类增强、Random\Randomizer替代mt_rand();但某些老旧 CI 工具链(如旧版 Jenkins 插件)可能尚未适配
实操建议:
sudo add-apt-repository ppa:ondrej/php sudo apt update sudo apt install php8.3 php8.3-cli php8.3-mysql php8.3-curl php8.3-mbstring
装完立刻验证:php -v 应输出 PHP 8.3.x;再运行 php -m | grep -E 'mysql|curl|mbstring' 确认扩展加载成功。
ThinkPHP 项目怎么匹配 PHP 版本?别让框架卡住升级
ThinkPHP 不是“向下兼容”,而是“向上绑定”——版本越高,要求越硬:
-
ThinkPHP 5.1:仅支持PHP 5.6–7.3,2021 年已结束生命周期,所有安全补丁停止更新 -
ThinkPHP 6.0:需PHP 7.1+,但 2024 年 10 月已结束 LTS 支持,composer create-project topthink/think:6.*现在会警告 -
ThinkPHP 8.0:强制要求PHP 8.0+,利用#[Route]、命名参数、联合类型等特性重构核心;php -v小于 8.0 时composer install直接退出
常见错误现象:
- 运行
php think run报错Fatal error: Attributes are only supported on PHP 8.0 and later→ 说明用了 TP8 但 PHP 版本太低 -
composer require topthink/think-orm失败,提示requires php ^8.0→ 不是包问题,是 PHP 版本没切对
Ubuntu 上切换 CLI 版本(避免 Nginx + PHP-FPM 和终端用不同版本):
sudo update-alternatives --config php sudo update-alternatives --config php-config
升级后第一件事:检查扩展和配置是否“真生效”
很多人装了 PHP 8.3,却还在用 php.ini 里残留的 PHP 7.4 路径,导致 opcache 不工作、date.timezone 无效、甚至 mbstring.func_overload 这种 PHP 7 时代废弃项引发致命错误。
- 确认实际加载的配置文件:
php --ini输出的Loaded Configuration File - 检查关键项是否符合 PHP 8+ 规范:
opcache.enable=1、date.timezone="Asia/Shanghai"、mbstring.strict_detection=1 - 禁用已被移除的配置(否则启动报 Warning):
always_populate_raw_post_data、magic_quotes_gpc、register_globals
一个典型陷阱:Ubuntu 安装多个 PHP 版本后,/etc/php/8.3/cli/php.ini 和 /etc/php/8.3/fpm/php.ini 是两份独立文件,Nginx + PHP-FPM 用的是后者,但你测试时用 php -m 看的是 CLI 版本 —— 两者扩展不一致会导致“本地能跑,线上 500”。
PHP 版本选择从来不是纯技术题,而是安全水位线、团队维护成本、和生态演进节奏的交点。最常被忽略的一点:别只盯着 php -v,务必验证 phpinfo() 在 Web 环境中真实加载的版本和扩展。











