You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同一服务器下WordPress插件函数重声明报错排查求助

问题

该WordPress插件已使用多时,同一版本在同一服务器的另一WordPress站点运行正常。请问服务器或PHP的深度优化是否会引发如下PHP致命错误?

[07-Sep-2022 07:41:13 UTC] PHP Fatal error: Cannot redeclare getWooCommerceProductBySku() (previously declared in /home/redacted/wp-content/plugins/duellintegration/includes/duell.php:92) in /home/redacted/wp-content/plugins/duellintegration/includes/duell.php on line 256

代码片段

...
91 if (!function_exists('getWooCommerceOrderDetailById')) {
92     function getWooCommerceOrderDetailById($id, $fields = null, $filter = array()) {
...
255 if (!function_exists('getWooCommerceProductBySku')) {
256     function getWooCommerceProductBySku($sku) {
...

环境信息

  • OS: Linux 3.10.0-962.3.2.lve1.5.42.el7.x86_64 #1 SMP Mon Nov 9 08:11:18 EST 2020 x86_64
  • PHP二进制路径: /opt/alt/php74/usr/bin/php
  • PHP版本: 7.4.30
  • 使用的php.ini: /opt/alt/php74/etc/php.ini
  • MySQL二进制路径: /bin/mysql
  • MySQL版本: mysql Ver 14.14 Distrib 5.7.38, for Linux (x86_64) using EditLine wrapper
  • WP-CLI版本: 2.6.0
  • Apache版本: 2.4.54
回答

这个错误核心是函数被重复声明,但代码里已经通过if (!function_exists('函数名'))做了存在性判断,按常规逻辑不该出现该问题。服务器或PHP的深度优化确实有可能触发这类问题,常见场景包括:

  • OPcache配置异常:若OPcache的opcache.enable_cli开启,或者缓存的脚本内容出现异常,可能导致同一文件被重复解析,使得函数存在性判断失效。比如OPcache缓存了未加判断逻辑的旧版代码,或是缓存机制冲突导致文件多次加载时跳过了存在性检查。
  • 文件包含机制被修改:部分服务器优化会自定义文件包含逻辑,导致duell.php被重复引入(比如两次调用include/require而非include_once/require_once),即便代码里有判断逻辑,第二次加载时也可能因优化导致判断未执行,或是函数名检查出现偏差。
  • 全局作用域或缓存异常:如果服务器优化涉及PHP命名空间强制处理、全局函数缓存机制异常,可能导致function_exists的判断结果不准确,误以为函数未声明,进而重复定义。

另外,虽然同一服务器的另一站点运行正常,但两个站点的插件加载顺序、主题兼容性、其他插件冲突也可能是诱因,不过服务器优化确实存在触发这类问题的可能性。

内容的提问来源于stack exchange,提问作者bovesan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 00:55:14