проблема с установкой mcrypt - PullRequest
14 голосов
/ 26 января 2011

Я попросил системных администраторов установить 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-алгоритмы]: алгоритмы не найдены в модуле dir

Когда я запускаю это:

$modes = mcrypt_list_modes("/usr/local/bin/mcrypt");

foreach ($modes as $mode) {
    echo "$mode <br />\n";
}

Я получаю:

Предупреждение: mcrypt_list_modes () [function.mcrypt-list-mode]: в модуле dir не найдено режимов

Однако, выполнив эту команду, эта команда

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 ?

UPDATE:

Я сделал это:

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-mode]: режимы не найдены в модуле dir в

Затем я вошел в файловый менеджер на моем CPanel и /usr/local/lib/libmcrypt. Каталог существует, но в нем нет файлов ...

Вот экран печати файлового менеджера.

Спасибо.

Ответы [ 6 ]

35 голосов
/ 26 ноября 2013

Попробуйте это для вашей проблемы с 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 и попробуйте снова?
5 голосов
/ 15 октября 2014

В Ubuntu 14.04 достаточно сделать всего три шага, как sudo:

apt-get install php5-mcrypt
php5enmod mcrypt
service apache2 restart
0 голосов
/ 30 октября 2016

Архитектура: Centos 6 / Apache 2.2 / установка Dual PHP (5.3 и 5.4)

ОБНОВЛЕНИЕ: Это решение объясняет, как установить модуль 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 имеет корень в /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>
0 голосов
/ 27 сентября 2016

Как установить mcrypt на MAC OSX:

Здравствуйте, протестировано и работает на Mac OSX El Capitan:

1. Загрузить mcrypt: http://www.viames.it/download/elcapitan/mcrypt.so

2. Поместите это в:

/ USR / Библиотека / PHP / расширения / Mcrypt

3. Измените свой 'php.ini'

/ и т.д. / php.ini

и добавить следующую строку:

extension = /usr/lib/php/extensions/mcrypt.so

4. Проверьте, загружен ли mcrypt с помощью следующей команды:

php -m

Результат консоли php -m

5. Создайте phpinfo.php с содержимым:

<?php echo phpinfo(); ?>

и посмотрите, есть ли в списке mcrypt:

phpinfo () теперь показывает, что mcrypt должен быть загружен

Да, я знаю, что я гангста.

0 голосов
/ 25 января 2012

У меня была точно такая же проблема.

> 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
0 голосов
/ 27 января 2011

Каталог алгоритмов 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

В зависимости от настроек.

...