Неустранимая ошибка: Вызов неопределенной функции mcrypt encrypt()
ПРИМЕЧАНИЕ: Библиотеки, от которых зависит поддержка MCrypt, не обновлялись годами, и MCrypt больше не следует считать жизнеспособным или безопасным методом шифрования данных. Более того, MCrypt устарел в PHP 5 и полностью удален в PHP 7. Если у вас есть какой-либо код, который запускает MCrypt, вам следует переработать его, чтобы использовать более современную библиотеку шифрования.
Кто-нибудь знает, почему это сообщение об ошибке: (Call to undefined function mcrypt_encrypt() )
отображается, когда я выполняю следующий код ниже?
Я Я пропустил некоторые шаги, возможно, какие-либо настройки в PHP, которые я должен выполнить, прежде чем этот код сможет работать?
$key = 'password to (en/de)crypt';
$string = 'string to be encrypted';
$test = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key),
$string, MCRYPT_MODE_CBC, md5(md5($key)));
17 answers
То, что сработало для меня с PHP версии 5.2.8, заключалось в том, чтобы открыть php.ini
и разрешить расширение php_mcrypt.dll
, удалив ;
, т.Е. изменив:
;extension=php_mcrypt.dll
к extension=php_mcrypt.dll
Если вы недавно обновили ubuntu до 14.04, вот решение этой проблемы:
$ sudo mv /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available/
$ sudo php5enmod mcrypt
$ sudo service apache2 restart
Для Windows
;extension=php_mcrypt.dll to extension=php_mcrypt.dll
then restart your apache server
Для Красной шляпы
sudo yum install php55-mcrypt //if php5.5
sudo yum install php-mcrypt //if less than 5.4
sudo service httpd restart //if apache 2.4
sudo /etc/init.d/httpd restart //if apache 2.2 or less
Для Ubuntu
sudo apt-get install php5-mcrypt
sudo service apache2 restart //if server not reloaded automatically
Все еще не работает?
Sudo php5enmod mcrypt &&перезапуск службы sudo apache2
У вас не установлена библиотека mcrypt.
См. http://www.php.net/manual/en/mcrypt.setup.php для получения дополнительной информации.
Если вы находитесь на общем хостинге, вы можете попросить своего провайдера установить его.
В OSX вы можете легко установить mcrypt с помощью homebrew
brew install php54-mcrypt --without-homebrew-php
Затем добавьте эту строку в /etc/php.ini.
extension="/usr/local/Cellar/php54-mcrypt/5.4.24/mcrypt.so"
В Ubuntu у меня была проблема, и я решил ее с помощью
$ sudo apt-get install php5-mcrypt
$ sudo service apache2 reload
В ubuntu 14.10:
Установить модуль mcrypt
sudo apt install php5-mcrypt
Включить модуль mcrypt на apache2
sudo a2enmod mcrypt
Перезагрузить конфигурацию модуля
sudo service apache2 restart
В Linux Mint 17.1 Ребекка - Вызов неопределенной функции mcrypt_create_iv...
Решается путем добавления следующей строки в php.ini
extension=mcrypt.so
После этого
service apache2 restart
Решил эту проблему...
Если вы используете PHP 7.2 или выше:
Эта функция УСТАРЕЛА в PHP 7.1.0 и УДАЛЕНА в PHP 7.2.0.
Источник: http://php.net/manual/en/function.mcrypt-encrypt.php
Таким образом, вам нужно заменить php-код и найти решение без mcrypt.
Включен ли mcrypt? Вы можете использовать phpinfo()
чтобы увидеть, так ли это.
Еще одно: если вы обслуживаете PHP через веб-сервер, такой как Apache, попробуйте перезапустить веб-сервер. Это приведет к "сбросу" всех модулей PHP, которые могут присутствовать, активируя новую конфигурацию.
Предполагая, что вы используете debian linux (я использую Linux mint 12, проблема была на сервере Ubuntu 12.04.1 LTS, на который я подключился по ssh.)
Я предлагаю воспользоваться советом @dkamins и убедиться, что у вас установлен и активен mcrypt при установке php5. Используйте "sudo apt-get установить php5-mcrypt" для установки. Мои заметки ниже.
Используя версию PHP PHP Version 5.3.10-1ubuntu3.4
, если вы откроете phpinfo(), как предложил @John Conde, что вы делаете, создавая тестовый файл на веб-сервере (например, создаете страницу статуса testphp.php с только содержимое""в любом месте, доступном на сервере через браузер)
Я не обнаружил наличия включенного или отключенного статуса на странице статуса при открытии в браузере. Когда я затем открыл файл php.ini, упомянутый @Anthony Forloney, думая раскомментировать ;extension=php_mcrypt.dll to extension=php_mcrypt.dll
Я переключил это туда и обратно и перезапустил Apache (я запускаю Apache2, и вы можете перезапустить мою настройку с помощью sudo /etc/init.d/apache2 restart
или, когда вы находитесь в этом каталоге, просто sudo restart
Я верю)
с переменами и без перемен, но все без толку. Я последовал совету @dkamins и пошел устанавливать пакет с помощью "sudo apt-get install php5-mcrypt", а затем перезапустил apache, как указано выше. Затем моя ошибка исчезла, и мое приложение работало нормально.
Если вы используете php5-fpm, не забудьте перезапустить его после установки mcrypt
Перезапуск службы php5-fpm
Если вы используете ubuntu 14.04, вот решение этой проблемы:
Сначала проверьте, что php5-mcryp уже установлен apt-get install php5-mcrypt
Если установлено, просто запустите эти две команды или установите и запустите эти две команды
$ sudo php5enmod mcrypt
$ sudo service apache2 restart
Я надеюсь, что это сработает.
У меня была та же проблема с PHP 7 версией отсутствующего mcrypt.
Это сработало для меня.
sudo apt-get update
sudo apt-get install mcrypt php7.0-mcrypt
sudo apt-get upgrade
sudo service apache2 restart (if needed)
Для Linux на базе (Fedora)
yum -y install php-mcrypt
Включите модуль, добавив:'extension=mcrypt.so 'в PHP.ini. (/etc/php.ini)
systemctl restart httpd.service
Готово!
Для меня это помогло удалить mcrypt с помощью:
sudo apt-get purge php5-mcrypt
И просто переустановите его:
sudo apt-get install php5-mcrypt
И не забудьте перезапустить apache, как описано выше.
Не знаю, почему и как это было иначе в моем случае (использование виртуальной машины с подготовленным php55), но, возможно, это поможет кому-то другому. У меня также была эта проблема с некоторыми другими модулями, такими как xcache...
Проверьте и установите php5-mcrypt:
sudo apt-get install php5-mcrypt