Mac OS: расширение Intl не загружено - PullRequest
4 голосов
/ 22 марта 2019
  • macOS Mojave 10.14.3
  • PHP 7.1.23
  • Prestashop 1.7.5.1

Я пытался установить расширение intl PHPна моем локальном сервере для использования Prestashop.

Я добавил extension=php_intl.so к etc/php.ini

Когда я пытаюсь установить Prestashop, я получаю Intl extension is not loaded.

$php -m |grep intl

Когда я делаю $ php -m | grep intl, я получаю:

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/pecl/20160303/php_intl.so' - d lopen(/usr/local/lib/php/pecl/20160303/php_intl.so, 9): image not found in Unknown on line 0 Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/pecl/20160303/php_intl.so' - dlopen (/usr/local/lib/php/pecl/20160303/php_intl.so, 9): image not found in Unknown on line 0 intl

Кажется, что файл php_intl.so не существует.

$ sudo pecl install intl

Я также попытался $ sudo pecl install intl и получаю:

make: *** [php_intl.lo] Error 1 ERROR: make 'failed`

$ curl -s http://php -osx.liip.ch / install.sh |bash -s 7.1

Я также пытался $ curl -s http://php-osx.liip.ch/install.sh | bash -s 7.1, и он не создает файл intl.so.


Как я могу решить эту проблему?

Ответы [ 3 ]

3 голосов
/ 26 мая 2019

Brew PHP 7.1, 7.2 и 7.3 у всех INTL включен по умолчанию .


Скорее всего, вы просто используете пакетную версию PHP для Mac OS.

Run

ls -l $(which php)

чтобы узнать, где находится текущий бинарный файл PHP и есть ли у него ссылка на установку Brew или нет. В моем случае, например:

lrwxr-xr-x 1 27 May 23 16:30 /usr/local/bin/php -> ../Cellar/php/7.3.5/bin/php

Это означает, что мой php связан с версией Brew 7.3.5.

Если вы НЕ используете Brew PHP, вы увидите что-то вроде

-rwxr-xr-x 1 11169664 Mar 21 07:09 /usr/bin/php

Установка PHP через Brew

Узнайте, установлен ли у вас PHP:

brew list | grep php

Если есть какие-либо выходные данные, и ваша версия PHP присутствует, перейдите к шагу 2 или используйте шаг 1, чтобы обновить PHP до последней версии.

1. Установите Homebrew's PHP

brew install php@7.3

(или 7.2, 7.1). Если Brew жалуется на невозможность найти формулу, возможно, вы ошиблись. Вместо php@7.3 вы можете указать полный путь к текущей формуле php :

brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/master/Formula/php.rb

Все еще не работает, проверьте, используете ли вы последнюю версию Homebrew brew --version.

Homebrew 2.1.3-31-geaf2370
Homebrew/homebrew-core (git revision fd1ef; last commit 2019-05-25)
Homebrew/homebrew-cask (git revision 16d50; last commit 2019-05-26)

2. Ссылка Homebrew's PHP

Теперь, чтобы иметь php на вашем пути, есть два варианта.

a) Любая версия homebrew должна быть связана с места установки (/ usr / local / bin / Cellar / php ....) в каталог на вашем пути (например, / usr / local / bin). Для этого выполните:

brew link --force php@7.3

Если вы не можете связать, это обычно вызывается установленными разрешениями или защитой целостности системы. В первом случае попробуйте sudo chown "$USER":admin /usr/local/bin/php.

b) Или , добавьте каталог /usr/local/opt/php@7.3 ( opt-prefix ) в переменную $ PATH. Например, для Bash :

echo 'export PATH="/usr/local/opt/php@7.3/bin:/usr/local/opt/php@7.3/sbin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile

3. Подтвердить установку

ls -l $(which php)

должен показать, что php связан с установкой Homebrew PHP в /usr/local/bin/Cellar.

php -v

должен отображать недавно установленную версию PHP. Попробуйте перезапустить свой терминал, если это не так.

php -i | grep -i intl

должен отображать некоторую информацию о текущей установке intl.

Если вы используете веб-серверы и / или PHP FPM, самое время перезапустить эти службы. (Или перезапустите вашу систему, если вы не знаете, как это сделать и не можете понять).

Возможные проблемы

Если вы по-прежнему получаете предупреждения об отсутствующих расширениях (невозможно загрузить динамическую библиотеку и т. Д.), Значит, ваш php.ini испорчен.

Найти текущее местоположение ini php

$ php -i | grep \.ini

Configuration File (php.ini) Path => /usr/local/etc/php/7.3
Loaded Configuration File => /usr/local/etc/php/7.3/php.ini
Scan this dir for additional .ini files => /usr/local/etc/php/7.3/conf.d
Additional .ini files parsed => /usr/local/etc/php/7.3/conf.d/ext-opcache.ini
....

Отредактируйте /usr/local/etc/php/7.3/php.ini и найдите загружаемую добавку (например, extension="myext.so"). Закомментируйте те, которые не могут быть найдены.

Доморощенные разрешения

Некоторые утверждают, , что это хорошая идея - чоу /usr/local.

sudo chown -R "$USER":admin /usr/local

Это сделает установку вещей здесь, вручную и через Homebrew, намного проще, но также и менее безопасным, так как процессам без полномочий root теперь разрешено писать и здесь.

Ваше веб-приложение использует другую версию PHP.

Убедитесь, что это не так ... Конфигурация этого зависит от используемого веб-сервера. Первым шагом будет вывод текущей конфигурации PHP в ваше веб-приложение с помощью <?php phpinfo();.

Это объясняет шаги для Apache.

Еще один способ заставить веб-сервер + стек PHP работать быстро - использовать Laravel Valet .

Установка дополнительных расширений

Чтобы установить дополнительные расширения PHP, используйте PEAR.

pear -V должен вывести текущую версию PEAR и PHP.

PEAR Version: 1.10.9
PHP Version: 7.3.5
Zend Engine Version: 3.3.5

Теперь, чтобы установить расширение, например, расширение yaml в PHP:

pear install yaml
0 голосов
/ 26 мая 2019

Возможно, проблема с brew

Вы можете попытаться использовать это, как упомянуто там:

brew tap kyslik / homebrew-php

brew install kyslik / php / php71-intl

0 голосов
/ 22 марта 2019

Поскольку в php 7 нет необходимости загружать расширение php_intl.so, что вам нужно сделать ?, отредактируйте ваш php.ini и удалите или прокомментируйте строку, загружающую расширение php_intl.so, после этого перезагрузите ваш apache ипопробуйте еще раз.

...