Фатальная ошибка: звонок в неопределенную функцию шифрования mcrypt()
Примечание: библиотеки, от которых зависит поддержка 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 ответов:
Если вы недавно обновили 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
Для Redhat
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 service apache2 перезапуск
у вас не установлена библиотека mcrypt.
см.http://www.php.net/manual/en/mcrypt.setup.php для получения дополнительной информации.
Если вы находитесь на виртуальном хостинге, вы можете попросить вашего провайдера, чтобы установить его.
в OSX вы можете легко установить mcrypt через homebrew
brew install php54-mcrypt --without-homebrew-php
затем добавьте эту строку в /etc / php.Ини.
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 Rebecca-вызов неопределенной функции 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 server I ssh'Ed В.)
Я предлагаю принять Совет @dkamins и убедиться, что у вас установлен mcrypt и активен на вашей установке php5. Используйте "sudo apt-get install 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.Ини. (/etc / php.ini)
systemctl restart httpd.service
готово!
для меня это помогло удалить mcrypt с:
sudo apt-get purge php5-mcrypt
и просто переустановить его:
sudo apt-get install php5-mcrypt
и не забудьте перезапустить Apache, как описано выше.
Не знаю, почему и как это было по-другому в моем случае (используя виртуальную машину с подготовленным php55), но, возможно, это поможет кому-то еще. У меня также была эта проблема с некоторыми другими модулями, такими как xcache...