Я попросил администраторов системы установить mcrypt на сервере, и они говорят, что все в порядке. Но когда я запускаю свой простой скрипт, я получаю это.
Предупреждение: mcrypt_get_iv_size () [function.mcrypt-get-iv-size]: Ошибка инициализации модуля
Это происходит из этой строки:
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256,MCRYPT_MODE_ECB);
Теперь, из этого кода:
$algorithms = mcrypt_list_algorithms("/usr/local/bin/mcrypt"); foreach ($algorithms as $cipher) { echo "$cipher<br />\n"; }
Я получил:
Предупреждение: mcrypt_list_algorithms () [function.mcrypt-list-algorithmms]: алгоритмов, найденных в модуле dir
Когда я запускаю это:
$modes = mcrypt_list_modes("/usr/local/bin/mcrypt"); foreach ($modes as $mode) { echo "$mode <br />\n"; }
Я получил:
Предупреждение: mcrypt_list_modes () [function.mcrypt-list-modes]: в модуле нет режимов
Однако, выполняя эту команду, эта команда
which mcrypt; mcrypt -v
Производит:
/usr/local/bin/mcrypt Mcrypt v.0.9.9 (x86_64-unknown-linux-gnu) Linked against libmcrypt v.2.5.7 Copyright (C) 1998-2002 Nikos Mavroyanopoulos (nmav@gnutls.org)
Правильно ли установлен / настроен mcrypt ?
ОБНОВИТЬ:
Я сделал это:
whereis libmcrypt
… и получил результат:
libmcrypt: /usr/local/lib/libmcrypt /usr/local/lib/libmcrypt.so /usr/local/lib/libmcrypt.la
Я также изменил:
$modes = mcrypt_list_modes("/usr/local/bin/mcrypt");
чтобы …
$modes = mcrypt_list_modes("/usr/local/lib/libmcrypt"); $algorithms = mcrypt_list_algorithms("/usr/local/lib/libmcrypt");
Как рекомендовано, но все равно получите ошибку:
Предупреждение: mcrypt_list_modes () [function.mcrypt-list-modes]: в модуле dir отсутствуют режимы
Затем я вошел в файловый менеджер в моем CPanel в /usr/local/lib/libmcrypt
. Каталог существует, но в нем нет файлов …
Вот экран печати файлового менеджера.
Благодарю.
Попробуйте это для своей проблемы с mcrypt:
mv -i /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available/ sudo php5enmod mcrypt sudo service apache2 restart
Это ошибка с расположением файла mcrypt.ini.
У меня была такая же ошибка, я сделал cp вместо mv, чтобы убедиться, но это решило проблему.
Если PHP не работает, если вы получаете работу phpmyadmin (даже с ошибкой mcrypt), это означает, что PHP работает (потому что phpmyadmin использует PHP). Но в вашем примере
<? echo $row['details']; ?>
изменить <?
до <?php
и повторите попытку?
На Ubuntu 14.04 просто нужно сделать всего три шага как sudo:
apt-get install php5-mcrypt php5enmod mcrypt service apache2 restart
Каталог алгоритмов mcrypt должен быть каталогом, содержащим алгоритмы, а не двоичным . Это означает, что это:
$modes = mcrypt_list_modes("/usr/local/bin/mcrypt");
Должно быть это вместо этого (предполагается, что mcrypt установлен /usr/local/lib/libmcrypt
):
$modes = mcrypt_list_modes("/usr/local/lib/libmcrypt");
Если каталог, в котором установлен libmcrypt
выше, вам необходимо обновить настройку php.ini . Взято из php.ini :
[mcrypt] ; Directory where to load mcrypt algorithms ; Default: Compiled in into libmcrypt (usually /usr/local/lib/libmcrypt) ;mcrypt.algorithms_dir= ; Directory where to load mcrypt modes ; Default: Compiled in into libmcrypt (usually /usr/local/lib/libmcrypt) ;mcrypt.modes_dir=
Если у вас есть доступ к оболочке, вы можете попробовать эту команду, чтобы найти каталог lib для вашей установки mcrypt:
whereis libmcrypt
или…
whereis mcrypt
В зависимости от вашей настройки.
У меня была точно такая же проблема.
> mcrypt -v Mcrypt v.0.9.9 (sparc-sun-solaris2.10) Linked against libmcrypt v.2.5.8 > mcrypt --list-hash Supported Hash Algorithms: crc32 md5 sha1 haval256 ripemd160 tiger gost [...] > php CryptoTest.php PHP Warning: mcrypt_list_modes(): No modes found in module dir in [...]
Он был решен путем реконфигурации и перекомпиляции libmcrypt с этими параметрами:
./configure --prefix=$YOUR_PATH/libmcrypt --enable-dynamic-loading --disable-posix-threads
Затем в вашем php.ini:
mcrypt.algorithms_dir=<YOUR_PATH>/libmcrypt/lib/libmcrypt mcrypt.modes_dir=<YOUR_PATH>/libmcrypt/lib/libmcrypt
Как установить mcrypt на MAC OSX:
Привет, протестирован и работает на Mac OSX El Capitan:
/ USR / Библиотека / PHP / расширения / Mcrypt
/etc/php.ini
и добавьте следующую строку:
extension = /usr/lib/php/extensions/mcrypt.so
php -m
Результат консоли php -m
<?php echo phpinfo(); ?>
и посмотрите, включен ли mcrypt:
phpinfo () теперь показывает mcrypt для загрузки
Да, я знаю, что я гангста.
Архитектура: Centos 6 / Apache 2.2 / Двойная установка PHP (5.3 и 5.4)
UPDATE: это решение объясняет, как вручную установить модуль mcrypt с помощью PHP 5.4 из RPM Remi на Centos 6, но для этого RPM требуется glibc-2.14 +, поэтому этого недостаточно, чтобы заставить его работать, если ваш glibc старше этого.
В моей конфигурации Yum install php-mcrypt*
показанный как установленная версия для 5.3
в обычном корне:
php-mcrypt.x86_64 5.3.3-5.el6 @epel
Однако 5.4 chrooted в /opt/rh/php54
Простое копирование модулей 5.3 и файлов конфигурации не работает . Модуль не выполняет инициализацию, поэтому он не отображается в phpinfo (), это можно проверить с помощью
/opt/rh/php54/root/usr/bin/php -v
Решение, которое сработало для меня, – загрузить RPM Remi (хотя его обычно проще установить, добавив его репозиторий Yum, как описано в комментариях) ( https://www.rpmfind.net/linux/RPM/remi/fedora/ 25 / x86_64 / php54-php-mcrypt-5.4.45-12.fc25.remi.x86_64.html )
wget ftp://fr2.rpmfind.net/linux/remi/fedora/25/remi/x86_64/php54-php-mcrypt-5.4.45-12.fc25.remi.x86_64.rpm
извлеките файлы с помощью RPM2CPIO:
rpm2cpio php54-php-mcrypt-5.4.45-12.fc25.remi.x86_64.rpm |cpio -idmv ./opt/remi/php54/root/etc/php.d/mcrypt.ini ./opt/remi/php54/root/usr/lib64/php/modules/mcrypt.so 98 blocks
И скопируйте в папку chroot
cp ./opt/remi/php54/root/etc/php.d/mcrypt.ini /opt/rh/php54/root/etc/php.d/mcrypt.ini cp ./opt/remi/php54/root/usr/lib64/php/modules/mcrypt.so /opt/rh/php54/root/usr/lib64/php/modules/
Проверять:
/opt/rh/php54/root/usr/bin/php -v
А также:
<html> <body> <?php phpinfo(); ?> </body> </html>