点击忘记密码发邮件遇CI_Form_validation::substr()未定义错误如何解决
错误根本原因
这是CodeIgniter 3.x版本的已知底层bug,报错的核心是代码错误地将PHP原生字符串截断函数substr()作为CI_Form_validation类的静态方法调用,使用了self::substr的写法,但CI_Form_validation类中并未定义同名静态方法,因此触发未定义方法异常。
修复方案
直接修改/home/thedevel/public_html/esports/new/system/libraries/Form_validation.php文件第1065行附近的代码,将两处self::substr替换为原生substr即可。
修改后的完整代码:
public function valid_email($email) { if (function_exists('idn_to_ascii') && defined('INTL_IDNA_VARIANT_UTS46') && $atpos = strpos($email, '@')) { $email = substr($email, 0, ++$atpos) . idn_to_ascii(substr($email, $atpos), 0, INTL_IDNA_VARIANT_UTS46); } return (bool) filter_var($email, FILTER_VALIDATE_EMAIL); }
补充注意事项
- 本次修改涉及CodeIgniter框架的核心系统文件,后续如果升级框架核心版本,需要重新检查该方法的实现,避免修改被新的核心文件覆盖。
- 如果你不想修改框架核心文件,也可以通过扩展表单验证类的方式重写
valid_email方法:在application/libraries目录下新建MY_Form_validation.php文件,继承原生CI_Form_validation类后重写上述方法即可,该方式不会受核心版本升级影响。
内容的提问来源于stack exchange,提问作者RDA Corporation
相关产品推荐
相关产品推荐

