mcrypt安装的问题

Kid*_*de 14 php centos mcrypt

我已经要求系统管理员在服务器上安装mcrypt,他们说一切正常.但是当我运行我的简单脚本时,我得到了这个.

警告:mcrypt_get_iv_size()[function.mcrypt-get-iv-size]:模块初始化失败

它来自这条线:

$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256,MCRYPT_MODE_ECB);
Run Code Online (Sandbox Code Playgroud)

现在,从这段代码:

$algorithms = mcrypt_list_algorithms("/usr/local/bin/mcrypt");

foreach ($algorithms as $cipher) {
    echo "$cipher<br />\n";
} 
Run Code Online (Sandbox Code Playgroud)

我明白了:

警告:mcrypt_list_algorithms()[function.mcrypt-list-algorithms]:在模块目录中找不到算法

当我运行这个:

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

foreach ($modes as $mode) {
    echo "$mode <br />\n";
}
Run Code Online (Sandbox Code Playgroud)

我明白了:

警告:mcrypt_list_modes()[function.mcrypt-list-modes]:在模块目录中找不到模式

但是,运行此命令时此命令

which mcrypt; mcrypt -v
Run Code Online (Sandbox Code Playgroud)

生产:

/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)
Run Code Online (Sandbox Code Playgroud)

是否已正确安装/配置mcrypt

更新:

我这样做了:

whereis libmcrypt
Run Code Online (Sandbox Code Playgroud)

......得到了结果:

libmcrypt: /usr/local/lib/libmcrypt /usr/local/lib/libmcrypt.so /usr/local/lib/libmcrypt.la
Run Code Online (Sandbox Code Playgroud)

我也改变了:

$modes = mcrypt_list_modes("/usr/local/bin/mcrypt");
Run Code Online (Sandbox Code Playgroud)

至...

$modes = mcrypt_list_modes("/usr/local/lib/libmcrypt");
$algorithms = mcrypt_list_algorithms("/usr/local/lib/libmcrypt");
Run Code Online (Sandbox Code Playgroud)

按照建议,但仍然会收到错误:

警告:mcrypt_list_modes()[function.mcrypt-list-modes]:在模块目录中找不到模式

然后我进入CPanel的文件管理器/usr/local/lib/libmcrypt.该目录存在,但它没有文件...

这是文件管理器的打印屏幕.

谢谢.

Aka*_*ija 35

试试你的mcrypt问题:

mv -i /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available/
sudo php5enmod mcrypt
sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)

这是mcrypt.ini文件位置的错误.

我有同样的错误,我做了一个cp而不是一个MV确定但它解决了问题.

对于PHP不工作,如果你使phpmyadmin工作(即使有mcrypt错误),这意味着PHP正在工作(因为phpmyadmin使用PHP).但在你的例子中

<? echo $row['details']; ?>
Run Code Online (Sandbox Code Playgroud) 改变<?<?php并再试一次?


Ern*_*est 5

在Ubuntu 14.04上只需要做三个步骤就像sudo:

apt-get install php5-mcrypt
php5enmod mcrypt
service apache2 restart
Run Code Online (Sandbox Code Playgroud)


net*_*der 0

mcrypt算法目录必须是包含算法的目录,不是二进制. 这意味着:

$modes = mcrypt_list_modes("/usr/local/bin/mcrypt");
Run Code Online (Sandbox Code Playgroud)

应该是这个(假设安装了mcrypt/usr/local/lib/libmcrypt):

$modes = mcrypt_list_modes("/usr/local/lib/libmcrypt");
Run Code Online (Sandbox Code Playgroud)

如果安装的目录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=
Run Code Online (Sandbox Code Playgroud)

如果您有 shell 访问权限,您可以尝试使用以下命令来查找 mcrypt 安装的 lib 目录:

whereis libmcrypt
Run Code Online (Sandbox Code Playgroud)

或者...

whereis mcrypt
Run Code Online (Sandbox Code Playgroud)

取决于您的设置。