Swiftmailer — использование неопределенной константы 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';
}

После выполнения возникает следующая ошибка:

Использование неопределенной константы INTL_IDNA_VARIANT_UTS46

Поиск проблемы:

  • PHP 7.1 phpinfo() подтверждает, что расширение intl загружено
  • Международная версия 1.1.0, ICU версия 4.2.1
  • Я использовал функцию для проверки функций расширения 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_IDNA_VARIANT_UTS46 не определено? Заранее спасибо.


person manix    schedule 26.01.2018    source источник
comment
Константа INTL_IDNA_VARIANT_UTS46 доступна в этой строке?   -  person user2342558    schedule 26.01.2018
comment
Отрицательный, константа не определена в этой строке   -  person manix    schedule 26.01.2018


Ответы (1)


Согласно 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, для которой требуется API UTS#46:

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

Итак, вам нужно обновить ICU.

person Timandes White    schedule 27.02.2018