thinkphp 5.0 在 php 7.4 下出现弃用警告是因 php 自身提示而非框架报错,应通过调整 error_reporting 配置屏蔽 e_deprecated 和 e_user_deprecated,推荐修改 php.ini 并重启服务,而非修改源码或使用 @ 抑制符。

ThinkPHP 5.0 在 PHP 7.4 环境下运行出现弃用警告(Deprecated),不是框架主动报错,而是 PHP 自身对某些已标记为“将来移除”的语法或函数发出的提示。这些警告本身不影响功能,但会干扰调试、日志和接口响应(比如输出到 JSON 前意外刷出警告文本)。关闭的关键是**控制 PHP 的错误报告级别**,而非修改 ThinkPHP 源码。
确认警告来源再处理
先判断是哪类弃用:
-
TP5.0 自身调用:如使用
$str{0}取字符串首字符、动态属性赋值($this->data = [])、或未加括号调用构造函数(new \think\Cache而非new \think\Cache()) -
第三方扩展或自定义代码:比如老版验证码、Excel 导出包中用了
mysql_connect或create_function -
PHP 7.4 新增的弃用项:如
get_magic_quotes_gpc()、implode()参数顺序颠倒、array_key_exists()传 null 等
可在 public/index.php 开头加一行临时诊断:error_reporting(E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED);
如果警告消失,说明确实是弃用类;若仍有其他错误,则需另查。
在 PHP 配置中屏蔽弃用警告
这是最稳妥、全局生效的方式,推荐生产环境使用:
- 编辑 PHP 配置文件(如
/etc/php/7.4/fpm/php.ini或php.ini) - 找到
error_reporting行,改为:error_reporting = E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED - 同时确认
display_errors = Off(线上必须关)、log_errors = On(确保错误仍记入日志) - 重启 PHP-FPM 或 Apache:
sudo systemctl restart php7.4-fpm(FPM)或sudo systemctl restart apache2(Apache)
在入口文件中临时禁用(仅限开发/测试)
若无法改服务器配置,可在 public/index.php 最顶部添加(必须在任何输出和框架加载前):
error_reporting(E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED);
ini_set('display_errors', '0');
注意:
- 不要放在 require '../thinkphp/start.php' 之后,否则部分框架初始化过程中的弃用警告已触发;
- 此方式只影响当前入口,若项目有多个入口(如 admin.php),需逐一添加。
不建议的做法
以下方式看似“关闭”,实则掩盖问题或带来风险:
- 把 error_reporting 设为 0:会同时屏蔽 Notice、Warning,不利于发现真实隐患
- 用 @ 抑制符包裹每一处调用:代码污染严重,且无法覆盖自动加载、钩子等框架内部行为
- 升级 TP5.0 到 5.1+ 来“修复”:TP5.1 仍存在大量兼容性弃用,且 5.0 → 5.1 升级需手动处理路由、中间件、验证器等变更,并非一键解决
PHP 7.4 对 TP5.0 是兼容的,弃用警告只是提醒,不影响运行。优先通过配置层面过滤,保持代码可读性与后期维护性。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











