PHPMailerAutoload()函数重复声明PHP致命错误排查求助
报错原因
这个报错核心是PHPMailerAutoload函数被重复声明,而且报错显示两次声明都来自同一个文件的同一行,说明你是多次引入了PHPMailerAutoload.php这个文件导致的:
- 最常见的原因是你在代码中使用
include/require加载该文件,没有加_once后缀,业务逻辑中多次执行了引入语句就会触发该问题。之前功能正常突然报错,大概率是最近调整了业务逻辑,比如新增了公共模块、分支路径里多了一次引入操作。 - 少数场景下PHP缓存(比如opcache)异常,也可能误判函数重复声明。
解决方案
你可以按优先级选择以下方案解决:
- 最快修复:把所有引入
PHPMailerAutoload.php的代码,从require 'PHPMailer/PHPMailerAutoload.php'改成require_once 'PHPMailer/PHPMailerAutoload.php',include同理改成include_once,该语法会自动判断文件是否已经加载,避免重复引入。 - 根因修复:排查业务代码的加载逻辑,找到重复引入该文件的位置,删掉多余的引入语句即可。
- 兼容修改:如果暂时找不到重复引入的位置,也可以直接修改
PHPMailerAutoload.php里的函数声明部分,在外面加一层函数存在性判断:
if (!function_exists('PHPMailerAutoload')) { function PHPMailerAutoload($classname) { // 原有函数逻辑不动 $filename = dirname(__FILE__).DIRECTORY_SEPARATOR.'class.'.strtolower($classname).'.php'; if (is_readable($filename)) { require $filename; } } }
- 如果你的PHP版本>=5.3,建议直接通过composer安装PHPMailer,用composer的统一自动加载机制,完全避免手动引入文件带来的重复加载问题。
内容的提问来源于stack exchange,提问作者JohnnyD
相关产品推荐
相关产品推荐

