Фатальная ошибка: звонок в неопределенную функцию шифрования 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 57

17 ответов:

то, что работало для меня с PHP версии 5.2.8, было открыть php.ini и разрешить

Если вы недавно обновили 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...

проверьте и установите php5-mcrypt:

sudo apt-get install php5-mcrypt