我已经要求系统管理员在服务器上安装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并再试一次?
在Ubuntu 14.04上只需要做三个步骤就像sudo:
apt-get install php5-mcrypt
php5enmod mcrypt
service apache2 restart
Run Code Online (Sandbox Code Playgroud)
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)
取决于您的设置。