Codeigniter 3.1.7有效电子邮件问题

w80xi6nr  于 2022-12-07  发布在  其他
关注(0)|答案(6)|浏览(136)

我有两个站点使用Codeigniter。今天我更新了站点到Codeigniter 3.1.7(从3.1.6)。之后,在这个站点之一的电子邮件验证已经打破,valid_email验证规则不再工作。在第二个站点都很好。我检查了错误日志,发现错误:

ERROR - 2018-02-06 10:13:21 --> Severity: Warning --> idn_to_ascii() expects parameter 3 to be long, string given /public_html/system/libraries/Form_validation.php 1235

Codeigniter的changlog说:

Updated Form Validation Library rule valid_email to use INTL_IDNA_VARIANT_UTS46 for non-ASCII domain names.

在我看来,INTL_IDNA_VARIANT_UTS46常量没有定义。使用PHP Version 5.6.30的站点
如何解决此问题?

niknxzdl

niknxzdl1#

我找到了关于这个问题的讨论here
问题是ICU库过时(安装了ICU版本4.2.1)

fae0ux8s

fae0ux8s2#

转到system/library/email. php并替换valid_email()

public function valid_email($email)
    {
    if (function_exists('idn_to_ascii') && defined('INTL_IDNA_VARIANT_UTS46') && $atpos = strpos($email, '@'))
    {
        $email = self::substr($email, 0, ++$atpos).idn_to_ascii(self::substr($email, $atpos), 0, INTL_IDNA_VARIANT_UTS46);
    }
    return (bool) filter_var($email, FILTER_VALIDATE_EMAIL);
   }
gcmastyq

gcmastyq3#

获取最新的codeigniter zip文件,然后转到系统-〉库-〉电子邮件文件,复制该电子邮件文件并将其粘贴到以前的Email.php库文件中,然后它就可以工作了

6qqygrtg

6qqygrtg4#

我认为有一个更好的方法来解决这个问题。因为我们都知道,电子邮件库不支持在php7.2,这就是为什么错误发生
idn_to_ascii():INTL_IDNA_VARIANT_2003已过时
Error Screenshot of codeigniter email library

快速解决方案:

  • --〉转到cPanel --〉选择PHP版本--〉将其更改为7.1而不是7.2
zaqlnxep

zaqlnxep5#

对于我的情况。我也面临着这个问题。
错误:

Severity: 8192 
Message: idn_to_ascii(): INTL_IDNA_VARIANT_2003 is deprecated Filename: libraries/Form_validation.php 
Line Number: 1234

我下载了最新的CodeIgniter版本。然后从system/libraries文件夹复制了Email.phpForm_validation.php。然后在相同的路径下替换为Existing Email.php和Form_validation.php。
更换后,它是开始工作罚款..!!
感谢@Evgeny的指导。

km0tfn4u

km0tfn4u6#

当你有不兼容的CI和PHP版本组合时,就会出现上述问题。我的意思是新的PHP版本和旧的CI版本,反之亦然。我的机器上有PHP7.3,而我从github下载的CI repo/project有CI版本3.1.5。我不得不替换系统文件夹(用新的CI版本替换3.1.5的系统文件夹,在我的例子中是3.1.10)来解决这个问题

相关问题