移动端报“JSON parse error”,抓包后发现响应最前面多了一行:

Deprecated: Creation of dynamic property VendorModuleModelClient::$token is deprecated

后面的 JSON 本身完全正确,但客户端从第一个字节开始解析,当然会失败。这类问题在 PHP 升级后很常见,根因是旧扩展动态创建属性;display_errors 又被误开,最终把诊断信息送给了 API 调用方。

应急处理

生产环境关闭错误直接展示,把错误留在 PHP-FPM 日志中。修改的是实际 FPM pool 使用的配置,不要只改 CLI 的 php.ini:

php --ini
php -i | grep -E 'display_errors|error_reporting'

CLI 输出只能帮助确认命令行环境。FPM 配置修改后需要平滑重载,并用接口再次确认 Content-Type 与响应首字节。

真正的修复

在报错类中声明属性并给出合适类型,或者升级扩展到支持当前 PHP 的版本。不要长期从 error_reporting 中屏蔽所有 Deprecated,因为同一批日志里可能还藏着下一次 PHP 大版本会直接失败的问题。

我会抽查 REST、GraphQL、后台保存和 Cron 四条入口:它们可能由不同 SAPI 或 pool 执行。验收标准是浏览器响应无杂字、日志能记录兼容性警告、修正后的模块不再产生该警告。