Swiftmailer - 使用未定义常量 INTL_IDNA_VARIANT_UTS46
Swiftmailer - Use of undefined constant INTL_IDNA_VARIANT_UTS46
我在使用 laravel 5.5 发送电子邮件时遇到问题,因为 swiftmailer 使用常量 INTL_IDNA_VARIANT_UTS46
,但它未定义。以这个重现错误的例子为例:
if (extension_loaded('intl')) {
echo INTL_IDNA_VARIANT_UTS46;
}
else{
echo 'intl not loaded';
}
执行后出现以下错误:
Use of undefined constant INTL_IDNA_VARIANT_UTS46
疑难解答:
- PHP 7.1 phpinfo() 确认加载了 intl 扩展
- 国际版本1.1.0,ICU版本4.2.1
我使用这个函数来测试国际扩展函数,它工作正常:
# ea-php71 -r '$a = numfmt_create( 'fr_FR_PARIS', NumberFormatter::DECIMAL); print numfmt_get_locale( $a, Locale::VALID_LOCALE ) . "\n";'
fr_FR
- 常量
INTL_IDNA_VARIANT_2003
实际定义!
为什么 INTL_IDNA_VARIANT_UTS46 未定义?提前谢谢你。
根据ext/intl/idn/idn.c:85-87
#ifdef HAVE_46_API
REGISTER_LONG_CONSTANT("INTL_IDNA_VARIANT_UTS46", INTL_IDN_VARIANT_UTS46, CONST_CS | CONST_PERSISTENT);
#endif
常数INTL_IDNA_VARIANT_UTS46
需要C常数HAVE_46_API
,这需要UTS#46API:
#ifdef UIDNA_INFO_INITIALIZER
#define HAVE_46_API 1 /* has UTS#46 API (introduced in ICU 4.6) */
#endif
所以,你需要升级你的ICU。
我在使用 laravel 5.5 发送电子邮件时遇到问题,因为 swiftmailer 使用常量 INTL_IDNA_VARIANT_UTS46
,但它未定义。以这个重现错误的例子为例:
if (extension_loaded('intl')) {
echo INTL_IDNA_VARIANT_UTS46;
}
else{
echo 'intl not loaded';
}
执行后出现以下错误:
Use of undefined constant INTL_IDNA_VARIANT_UTS46
疑难解答:
- PHP 7.1 phpinfo() 确认加载了 intl 扩展
- 国际版本1.1.0,ICU版本4.2.1
我使用这个函数来测试国际扩展函数,它工作正常:
# ea-php71 -r '$a = numfmt_create( 'fr_FR_PARIS', NumberFormatter::DECIMAL); print numfmt_get_locale( $a, Locale::VALID_LOCALE ) . "\n";' fr_FR
- 常量
INTL_IDNA_VARIANT_2003
实际定义!
为什么 INTL_IDNA_VARIANT_UTS46 未定义?提前谢谢你。
根据ext/intl/idn/idn.c:85-87
#ifdef HAVE_46_API
REGISTER_LONG_CONSTANT("INTL_IDNA_VARIANT_UTS46", INTL_IDN_VARIANT_UTS46, CONST_CS | CONST_PERSISTENT);
#endif
常数INTL_IDNA_VARIANT_UTS46
需要C常数HAVE_46_API
,这需要UTS#46API:
#ifdef UIDNA_INFO_INITIALIZER
#define HAVE_46_API 1 /* has UTS#46 API (introduced in ICU 4.6) */
#endif
所以,你需要升级你的ICU。