站点文件恢复,不代表运行环境也恢复。2018 年一次主机故障后,旧博客重新可访问,却因插件出现 unexpected T_FUNCTION;进入后台才发现 PHP 变成了 5.2.17。

售后处理后出现了另一个问题

网站突然访问不了,我联系主机售后。第二天恢复后,首页报错指向插件文件:

Parse error: syntax error, unexpected T_FUNCTION in ...

当时先移除了报错插件,后台才得以访问;仪表盘提示 PHP 版本过低。后来在 cPanel 中找到版本选择入口,切换至 5.6,问题恢复。

5.2.17 与 5.6 都只是当年的环境记录,不是今天的版本选择建议。也没有售后操作日志能证明降级具体发生在哪一步。

异常文本要与代码和版本一起看

T_FUNCTION 是解析器遇到的语法标记,报错位置不一定就是最初错误。旧版本不支持的语法、前面的分隔符缺失等,都可能让解析在这里失败。

当年的 PHP 5.2 环境确实值得怀疑,但没有保存报错行,不能把所有 T_FUNCTION 都归给同一语法特性。应查看报错行附近代码,并对照当前运行版本的语法支持。PHP 匿名函数说明

恢复时应同时保留什么

除文件和数据库,还应记录 PHP 版本、需要的扩展、关键配置、Web 服务的 PHP 处理方式、文件权限以及计划任务环境。CLI 的 php -v 不一定代表网站使用的 PHP;多版本主机还需要核对 Web 运行入口。

恢复后不能只检查首页。还要检查后台登录、插件功能、上传和计划任务。对需要暂时停用的插件,优先用可恢复的方式操作,保留原文件和配置,避免靠永久删除丢失功能。

这次经历最有用的是恢复验收的范围:应用代码、数据和运行环境要一起对照,不能看到文件已经回来就宣布站点完全恢复。