Intl Компонент Symfony2

1

Я развертываю приложение symfony2 на сервере, где расширение php intl не включено. Я не говорю об этом.

Ответ на этот вопрос предлагает решение: возможно ли отключить внутреннее требование для Symfony?

Я поставил "symfony/intl": "3.0.*@dev" в моем composer.json и все обновляется отлично. Должен ли я сделать что-нибудь еще, чтобы активировать/включить его? В AppKernel как с пучками?

Теперь я получаю следующие ошибки при запуске check.php на сервере развертывания:

 PHP Fatal error:  Uncaught exception 'ReflectionException' with message 'Extension intl does not exist' in /web/folk/eirik/030476/releases/20150528181203/app/SymfonyRequirements.php:658
Stack trace:
#0 /web/folk/eirik/030476/releases/20150528181203/app/SymfonyRequirements.php(658): ReflectionExtension->__construct('intl')
#1 /web/folk/eirik/030476/releases/20150528181203/app/check.php(6): SymfonyRequirements->__construct()
#2 {main}
  thrown in /web/folk/eirik/030476/releases/20150528181203/app/SymfonyRequirements.php on line 658

Я смотрю на строку 658 в SymfonyRequirements.php и нахожу:

    if (class_exists('Locale')) {
              if (defined('INTL_ICU_VERSION')) {
                $version = INTL_ICU_VERSION;
            } else {
                $reflector = new ReflectionExtension('intl');

                ob_start();
                $reflector->info();
                $output = strip_tags(ob_get_clean());

                preg_match('/^ICU version +(?:=> )?(.*)$/m', $output, $matches);
                $version = $matches[1];
            }

            $this->addRecommendation(
                version_compare($version, '4.0', '>='),
                'intl ICU version should be at least 4+',
                'Upgrade your <strong>intl</strong> extension with a newer ICU version (4+).'
            );
        }

Я мало знаю об этом, но я предполагаю, что новый ReflectionExtension ('intl') требует, чтобы расширение intl было включено в php, что для меня не является вариантом.

Но что такое INTL_ICU_VERSION? И почему это не определено? И почему компонент symfony/intl не исправит это для меня?

И btw

if (class_exists('Collator')) {
           $this->addRecommendation(
               null !== new Collator('FR_fr'),
               'intl extension should be correctly configured',
            'The intl extension does not behave properly. This problem is       typical on PHP 5.3.X x64 WIN builds.'
        );
    }

Я также изменил 'FR_fr' на 'en' здесь, это была ошибка, данная check.php, которая исчезла, когда я внес изменения.

  • 0
    php.net/manual/en/intl.installation.php
  • 0
    @Tomassz Это сервер в моем университете, у меня нет прав доступа для выполнения таких операций. На моем компьютере, где я разрабатываю, я могу просто раскомментировать расширение = php_intl.dll в php.ini. Но я не могу сделать это там, где я собираюсь развернуть.
Теги:

1 ответ

1

Если вы check.php в файл check.php вы используете, вы увидите, что он не загружает автозагрузчик Composer, поэтому не имеет значения, установлен ли этот компонент Symfony Intl или нет, он будет продолжать сбой, поскольку он выглядит для требуемого расширения, которого нет. Вопрос SO, который вы связали, указывает на то, что проблема решена, но она не говорит, что проверка прошла.

Если это расширение было вашей проблемой с установкой Symfony, и вам нужна только локальная локальная сеть, то проблема должна исчезнуть уже после установки замены Symfony Intl. Хотя, если вы хотите запустить проверку на другие проблемы, вы можете прокомментировать эти строки, чтобы сценарий мог закончить. Не беспокойтесь, что скрипт полностью отделен от фреймворка, вы даже можете удалить его, когда закончите.

Если вы используете Capistrano для развертывания, и вы выполняете эти проверки в каждом развертывании, вы также можете отключить его или настроить этот сценарий для своих нужд.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню