Php Swiftmailer-使用未定义的常量INTL_IDNA_VARIANT_UTS46

Php Swiftmailer-使用未定义的常量INTL_IDNA_VARIANT_UTS46,php,centos6,php-7.1,intl,Php,Centos6,Php 7.1,Intl,我在使用laravel 5.5发送电子邮件时遇到问题,因为swiftmailer使用常量INTL_IDNA_VARIANT_UTS46,但它未定义。以重现错误的示例为例: if (extension_loaded('intl')) { echo INTL_IDNA_VARIANT_UTS46; } else{ echo 'intl not loaded'; } 一旦执行,将引发以下错误: 使用未定义的常量INTL_IDNA_VARIANT_UTS46 故障排除: PHP7.1

我在使用laravel 5.5发送电子邮件时遇到问题,因为swiftmailer使用常量INTL_IDNA_VARIANT_UTS46,但它未定义。以重现错误的示例为例:

if (extension_loaded('intl')) {
    echo INTL_IDNA_VARIANT_UTS46;
}
else{
    echo 'intl not loaded';
}
一旦执行,将引发以下错误:

使用未定义的常量INTL_IDNA_VARIANT_UTS46

故障排除:

PHP7.1 phpinfo确认已加载intl扩展 Intl版本1.1.0,ICU版本4.2.1 我使用funciont测试intl扩展函数,它工作正常:

# 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\U IDNA\U VARIANT\U 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_变量UTS46需要C常量HAVE_46_API,它需要UTS46 API:

#ifdef UIDNA_INFO_INITIALIZER
#define HAVE_46_API 1 /* has UTS#46 API (introduced in ICU 4.6) */
#endif

因此,您需要升级您的ICU。

该行可以访问常量INTL\u IDNA\u VARIANT\u UTS46?否,该行未定义常量