Установите php70-mcrypt на Mac High Sierra

Я установил mcrypt с помощью Homebrew, но, похоже, он не загружается. Я установил, запустив:

brew install php70-mcrypt

Когда я запускаю phpinfo() в браузере, я не вижу сведений об установке mcrypt (кроме авторов модуля).

Использует ли nginx тот же php, который я получаю из командной строки? Или я неправильно устанавливаю/включаю mcrypt?

Использование phpinfo() в браузере:

phpinfo сообщает мне путь .ini:

Извлечение скриншота phpinfo()

Если я проверю каталог /usr/local/etc/php/7.0/conf.d, там есть два файла .ini:

  1. ext-intl.ini
  2. ext-mcrypt.ini

но они, кажется, не были проанализированы. Один mcrypt (тот, который я пытаюсь заставить работать) содержит:

скриншот содержимого ext-mcrypt.ini

а /usr/local/opt/php70-mcrypt — символическая ссылка на папку Cellar /usr/local/Cellar/php70-mcrypt/7.0.27_19, которая содержит файл mcrypt.so.

Я попытался добавить расширение в файл php.ini напрямую, как с путем, так и без него. Каждый раз, когда я сохраняю файл, перезапускаю php (не уверен, что это необходимо...) и nginx:

brew services restart php70
brew services restart nginx

Все еще не загружается.

Использование терминала:

Если я запускаю это из терминала:

php -i | grep mcrypt

Я получил:

/usr/local/etc/php/7.0/conf.d/ext-mcrypt.ini
Registered Stream Filters => zlib.*, bzip2.*, convert.iconv.*, string.rot13, 
string.toupper, string.tolower, string.strip_tags, convert.*, consumed, 
dechunk, mcrypt.*, mdecrypt.*
mcrypt
mcrypt support => enabled
mcrypt_filter support => enabled
mcrypt.algorithms_dir => no value => no value
mcrypt.modes_dir => no value => no value

Здесь, кажется, больше подробностей.

Использует ли nginx другой php из командной строки? Как я могу убедиться, что nginx использует php, который я вижу в командной строке, если это проблема? Или, в качестве альтернативы, как я могу установить php на «другой» php, который использует nginx?

Основной причиной этого является загрузка Magento 2, которая выдает мне эту ошибку, которая, я думаю, подтверждает, что mcrypt действительно не загружается должным образом:

Exception #0 (Exception): Notice: Use of undefined constant MCRYPT_BLOWFISH - assumed 'MCRYPT_BLOWFISH' in /[MY DOC ROOT]/magento2/vendor/magento/framework/Encryption/Encryptor.php on line 397

Что я здесь делаю неправильно?


person Ben    schedule 09.01.2018    source источник
comment
Лучше не использовать PHP mcrypt, это заброшенное программное обеспечение, оно не обновлялось годами и не поддерживает стандартное заполнение PKCS#7 (урожденное PKCS#5), только нестандартное заполнение нулями, которое даже нельзя использовать с двоичным кодом. данные. mcrypt содержит множество нерешенных ошибок, начиная с 2003 года. Расширение mcrypt устарело и будет удалено. в PHP 7.2. Вместо этого рассмотрите возможность использования defuse или RNCryptor, они обеспечивают полное решение, поддерживаются и являются правильными.   -  person zaph    schedule 09.01.2018
comment
@zaph Я использую mcrypt только потому, что это зависимость от Magento (последняя версия 2.2): devdocs.magento.com/guides/v2.2/install-gde/   -  person Ben    schedule 09.01.2018
comment
Тогда я предполагаю, что проблема в Magento, они не должны использовать устаревшие и удаленные пакеты, особенно связанные с безопасностью.   -  person zaph    schedule 09.01.2018


Ответы (1)


У меня установлен mcrypt. Как я и подозревал, nginx использовал другую версию php (7.0.26), потому что новая версия (7.0.27) не могла прослушивать порт 9000, поскольку он уже использовался. Для справки, я нашел это, проверив файл php-fpm.log.

Чтобы исправить это, я использовал ответ здесь, чтобы найти и убить процессы.

Я обнаружил запущенные процессы:

ps aux | grep php

Затем убил их (их было четверо):

kill [PID]

Затем запустил php:

brew services php70 start

Теперь моя страница phpinfo показывает, что 7.0.27 запущен и mcrypt установлен:

введите здесь описание изображения

Стоит отметить комментарий от @zaph — mcrypt устарел. Я запускаю его только для того, чтобы использовать Magento, поскольку это зависимость.

person Ben    schedule 10.01.2018