Prestashop1.7.6.5修改module.php代码不生效仍报旧错误
问题描述
- 修改站点模块代码时,Prestashop无法识别
module.php文件的代码改动 - 此前曾对该模块做过定制调整,近期版本更新触发报错需要二次修改,出现异常:即便删除报错对应的代码行,系统依然抛出完全相同的错误
- 具体报错信息:
PHP message: PHP Notice: Undefined index: ordersorderFilter!active in /modules/module/module.php on line 104
- 已完成的排查操作:
- 先后尝试注释报错行、直接从文件中删除报错行,报错始终存在
- 关闭Prestashop后台所有缓存开关、开启调试模式
- 删除
/var/cache/目录下的dev和prod文件夹,问题未解决 - 在服务器端使用
grep命令全局检索对应代码行,确认源文件删除后服务器内无该代码残留(重新加回代码时可正常检索到)
排查解决思路
按优先级从高到低依次排查:
- 清空PHP OPcache缓存:绝大多数代码修改不生效的非框架问题都来自OPcache。服务器默认开启OPcache时,会缓存PHP脚本编译后的字节码,如果没有配置文件变更自动校验规则,修改代码后不会触发重新编译。可以通过重启PHP-FPM服务(Apache运行环境直接重启Apache),或者执行
php -r "opcache_reset();"清空OPcache缓存后再验证。 - 排查主题目录下的模块覆写文件:Prestashop会优先加载当前启用主题下的模块覆写文件,路径通常为
/themes/<当前使用主题名>/modules/<模块名>/module.php,如果你只修改/modules/目录下的源文件,主题目录下的覆写文件逻辑依然会执行。不要限定检索路径,全局搜索整个站点下所有PHP文件中的ordersorderFilter!active关键词,确认是否存在其他位置的文件包含这段报错逻辑。 - 检查override目录下的类覆写:Prestashop原生支持模块类覆写,覆写文件统一存放在
/override/modules/<模块名>/module.php路径,该路径下文件的加载优先级高于模块原生文件,哪怕原生文件里的报错代码已经删除,覆写文件里的对应代码依然会触发报错。直接进入该路径检查是否存在对应模块的覆写文件,核对104行附近的代码逻辑。 - 核对文件加载路径与权限:执行
ls -l /modules/<模块名>/module.php确认文件的最后修改时间和你实际编辑的时间一致,同时确认文件属主属组和Web服务运行用户一致,避免出现编辑了其他路径下的文件副本、Web服务实际读取的是另一路径下文件的情况。 - 排查服务器反向代理/缓存层:如果站点前端部署了Varnish、Nginx FastCGI缓存或者CDN,先临时绕过缓存层直接访问源站,确认不是缓存层返回了旧的响应结果。
内容的提问来源于stack exchange,提问作者Dev MAJ
相关产品推荐
相关产品推荐

