老项目(WordPress 5.x/ThinkPHP 5.0等)选PHP 7.4,因其完整支持mysql_connect()、create_function()等废弃函数及旧扩展;新项目(Laravel 10+/TP 6.3+)优先选PHP 8.2或8.3,匹配框架最低要求与现代特性,避免PHP 8.4。

选PHP版本不是挑最新,也不是守最老,而是看项目实际跑什么、依赖谁、往哪走。
老项目(WordPress 5.x / ThinkPHP 5.0 / DEDECMS等)用PHP 7.4
这类系统普遍调用已废弃函数(如 mysql_connect()、create_function()),依赖宽松语法和旧扩展(如 memcache、ionCube)。PHP 7.4 是目前唯一仍完整支持这些特性的稳定版本,宝塔面板默认常含此版,扩展编译包也最全。
- 别硬上 PHP 8.0+:assert() 行为变更、__toString() 强制返回 string、移除 each() 等,容易导致白屏或 Fatal Error
- PHP 8.4 更要避开:彻底删除 get_magic_quotes_gpc(),弱类型比较更严格,老 CMS 登录、表单提交极易失败
- 若必须升级,先用 PHPCompatibility 扫描代码,再在测试环境逐模块验证
新项目(Laravel 10+/Symfony 6+/ThinkPHP 6.3+)优先选 PHP 8.2 或 8.3
框架官方明确标注最低要求:Laravel 10 需 PHP ≥8.1,Laravel 11 要求 ≥8.2;ThinkPHP 6.3 默认启用严格类型,联合类型(string|int)、只读属性(readonly)、枚举(enum)都是刚需。
- PHP 8.3 是当前最新稳定版,JIT 编译器优化更成熟,错误处理统一为 Error 异常,适合全新架构
- PHP 8.2 更稳妥:生态适配更广,Swoole、Redis 扩展基本都已支持,宝塔管理也更稳定
- 避免直接上 PHP 8.4:部分 Composer 插件(如 laravel/pint)尚未适配,宝塔扩展识别仍有延迟
确认你真正运行的是哪个版本
宝塔里设了网站用 PHP 8.2,不代表终端命令也是它——Web 请求走 PHP-FPM,CLI 命令走 /usr/bin/php 软链接,两者完全独立。
立即学习“PHP免费学习笔记(深入)”;
- 查网站实际版本:建 info.php 输出 phpversion(),或看 /www/wwwlogs/域名.error.log 中的 warning
- 查 CLI 版本:终端执行 php -v;切换 CLI 版本需进宝塔 → “16. 切换PHP-CLI版本”
- 运行 Composer 必须显式指定路径:/www/server/php/82/bin/php /usr/bin/composer install
装完别急着上线,重点检查三件事
不同 PHP 版本的 php.ini 差异很大,配置不对会静默出错。
- opcache.enable:FPM 默认开,CLI 默认关(PHP 8.0+),不手动开启会导致 CLI 下性能骤降
- date.timezone 未设置时,PHP 8.0+ 会触发警告;mbstring.func_overload 在 8.2 中已彻底移除
- FPM 和 CLI 的配置文件是分开的:/etc/php/8.2/fpm/php.ini 和 /etc/php/8.2/cli/php.ini,改完要分别重启服务并验证



















