Не удается получить mcrypt для PHP5

29

Я делал это много раз:

sudo aptitude install php5-mcrypt

sudo apache2ctl restart

aptitude говорит, что mcrypt установлен. Я переустанавливал его уже 3 раза. Я перезапускал apache около 20 раз с момента его установки. Когда я смотрю на phpInfo, я не вижу в списке mcrypt. Когда я пытаюсь выполнить свой код, он говорит, что функция mcrypt (выберите одну - любую) не существует. mcrypt явно не включен.

У кого-нибудь есть идеи, что может быть не так? Я не знаю, какие части должны быть, где и как все это должно сочетаться.

Я установил PHP 5.5.3

webDeveloperDave
источник
Вы тоже установили PHP из менеджера пакетов ( apt-get/ aptitude)? Пакет php5-mcryptможет настроить расширение только для php.inis, о котором он «знает». Во-вторых, я не сейчас apache2ctlперезагружаю модули. «Нормальный» способ перезапустить Apache - это что-то вроде sudo service apache2 restart. В-третьих, как PHP подключен к вашему Apache? Если вы используете что-то вроде (f) cgi или php-fpm (в отличие от mod-php), вам, вероятно, придется перезапустить PHP самостоятельно, в дополнение к перезапуску Apache.
Хеннинг Кокербек
Мы установили все, используя aptitude. apache2ctl останавливается и перезапускает apache. После перезагрузки мы несколько раз перезагружали компьютер. Поверьте мне, когда я говорю, что apache был «перезапущен» с тех пор, как мы установили php5-mcrypt, а также PHP. PHP5 прекрасно работает как модуль apache - это веб-сайт, написанный на PHP - поэтому я предполагаю, что PHP установлен как модуль apache. Если я иду в / etc / apache2 / mods-enabled php5 находится в этом списке. Я не вижу mcrypt в / etc / php5 / mods-available, но если я выполняю sudo aptitude search mcrypt, я вижу 3 установленных компонента: libmcypt4, mcrypt и php5-mcrypt - ????
webDeveloperDave
Что php.iniуказано в выходных данных phpinfo(примерно с 5 по 7 записи)? Это должен быть файл в /etc/php5/. Если вы ищете в этом файле mcrypt, что получается?
Хеннинг Кокербек
php.ini находится в /etc/php5/apache2/php.ini, там есть раздел mcrypt с двумя настройками - оба закомментированы - mcrypt.algorithms_dir и mcrypt.modes_dir, комментарии над ними говорят, что по умолчанию используется / usr / local / lib / libmcrypt - эти каталоги не существуют. Это то, что сначала дало мне понять, что mcrypt не может быть установлен, хотя aptitude говорит, что это так. Если я делаю sudo aptitude info, mcrypt говорит, что состояние пакета установлено - версия 2.6.8-1.3, - это говорит о конфликтах: mcrypt - так о чем это говорит? что этот пакет конфликтует сам с собой? Есть ли лучший способ зашифровать информацию о пользователе?
webDeveloperDave
Вам не нужно заботиться о mcryptпосылке. Это программа командной строки, которая использует libmcrypt, как и расширение PHP. Поэтому вам нужно убедиться, что пакет libmcrypt4установлен. Есть ли php.iniфрагмент /etc/php5/conf.d/mcrypt.ini? Это должно загрузить библиотеку. Этот фрагмент загружен PHP (см. phpinfo)? Опять же, вы пытались перезапустить Apache sudo service apache2 restartвместо apache2ctl?
Хеннинг Кокербек

Ответы:

62

Попробуй это

sudo php5enmod mcrypt

sudo service apache2 restart
user229183
источник
Работал хорошо, и символическая ссылка (за копирование всего) +1 для меня. Так что проголосовали!
Стефано Мтангу
4
Это сработало для меня. Но мне не нужна была первая команда (ln). У меня не было mcrypt.ini в папке /etc/php5/apache/conf.d. Запуск sudo php4enmod mcrypt сработал. Файл там сейчас. Сервер работает! Большое спасибо.
peterept
1
Спасибо, что работает нормально. Но я хочу знать о команде, которую вы использовали "sudo php5enmod mcrypt" .. Что это ..? Какова цель использования этой команды ..?
Елаварасан
1
«sudo php5enmod mcrypt» создаст символическую ссылку в каталоге «/etc/php5/conf.d» с номером приоритета (по умолчанию 20), так что вы можете удалить его, не изменяя ini-файлы с помощью «sudo php5dismod mcrypt»
Vizjerai
11

У меня была похожая проблема на Ubuntu 13.10. После запуска composer установил ту же ошибку, оканчивающуюся на.

****Mcrypt PHP extension required.
Script php artisan clear-compiled handling the post-update-cmd event returned with an error

  [RuntimeException]  
  Error Output:****   

Я установил mcryptи php5-mcryptс aptitude, и все php -mеще не показывал mcryptв качестве загруженного расширения:

aptitude install mcrypt
aptitude install php5-mcrypt

Я побежал updatedb, а потом locate mcrypt. Я нашел mcrypt.iniин /etc/php5/conf.d. Все остальные расширения (например, json) имели свои файлы .ini в /etc/php5/apache2/conf.dи /etc/php5/cli/conf.d. Оба были ссылками на ../../mods.available.

Итак, я затем переехал mcrypt.iniв /etc/php5/available-modulesи установите ссылки:

cd /etc/php5/cli/conf.d
ln -s ../../mods-available/mcrypt.ini 20-mcrypt.ini

И аналогично для /etc/php5/apache2/conf.d.

И вуаля, это обнаружилось в php -m!

user239289
источник
Большое спасибо за этот ответ. Полностью разобрались со мной. Хотя я не перемещал /etc/php5/conf.d/mcrypt.ini - я просто установил свои символические ссылки так, чтобы они указывали на это местоположение, которое также сработало и, вероятно, будет обеспечивать автоматическую загрузку будущих обновлений для mcrypt?
alexleonard
2

Похоже, отсутствует фрагмент кода ini, который загружает libmcrypt при вызове PHP Apache. Должен быть файл /etc/php5/apache2/conf.d/mcrypt.iniс таким содержимым

; configuration for php MCrypt module
extension=mcrypt.so

Вы должны иметь возможность скопировать его из других конфигураций PHP, например /etc/php5/cli/conf.d/mcrypt.iniили /etc/php5/conf.d/mcrypt.ini, в зависимости от того, что установлено в вашей системе.

Хеннинг Кокербек
источник
2

Модуль mcrypt не включен по умолчанию. Включите модуль mcrypt, а затем перезапустите apache ( credit )

sudo php5enmod mcrypt
sudo service apache2 restart
Boinst
источник
1

Ну вот и все. Похоже, иногда мы находимся в поиске наиболее запутанного способа сделать что-то столь же простое, как 'enmod'; ) Как Boinst говорит: sudo php5enmod mcrypt. Затем перезагрузите Apache.

Maximo
источник