14

我已经要求系统管理员在服务器上安装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-algorithms]:在模块目录中找不到算法

当我运行这个:

$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]:在模块目录中找不到模式

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

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

谢谢。

4

6 回答 6

35

试试这个解决你的 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

于 2013-11-26T05:06:24.887 回答
5

在 Ubuntu 14.04 上,只需要像 sudo 一样执行三个步骤:

apt-get install php5-mcrypt
php5enmod mcrypt
service apache2 restart
于 2014-10-15T02:12:49.053 回答
0

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=

如果你有 shell 访问权限,你可以尝试这个命令来找到你的 mcrypt 安装的 lib 目录:

whereis libmcrypt

或者...

whereis mcrypt

取决于你的设置。

于 2011-01-26T21:22:26.183 回答
0

我有完全相同的问题。

> 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
于 2012-01-24T20:23:36.700 回答
-1

如何在 MAC OSX 上安装 mcrypt:

您好,在 Mac OSX El Capitan 上经过测试和工作:

1.下载mcrypt: http: //www.viames.it/download/elcapitan/mcrypt.so

2. 将其放置在:

/usr/lib/php/extensions/mcrypt

3.修改你的'php.ini'

/etc/php.ini

并添加以下行:

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

4. 检查是否使用以下命令加载了“mcrypt”:

php -m

php -m 控制台结果

5. 创建一个包含内容的“phpinfo.php”:

<?php echo phpinfo(); ?>

并查看是否列出了 mcrypt:

phpinfo() 现在显示要加载的 mcrypt

是的,我知道我是黑帮。

于 2016-09-27T17:42:02.183 回答
-1

架构:Centos 6 / Apache 2.2 / 双 PHP 安装(5.3 和 5.4)

更新:这个解决方案解释了如何在 Centos 6 上从 Remi 的 RPM 手动安装模块 mcrypt 和 PHP 5.4,但是这个 RPM 需要 glibc-2.14+,所以如果你的 glibc 比那个更旧,这还不足以让它工作。

在我的配置中,Yum install php-mcrypt*显示为5.3在普通根目录下安装的版本:

php-mcrypt.x86_64                    5.3.3-5.el6                                  @epel

但是,5.4被 chroot 于/opt/rh/php54

简单地复制 5.3 模块和配置文件是行不通的。模块初始化失败,这就是它没有出现在 phpinfo() 中的原因,这可以检查

/opt/rh/php54/root/usr/bin/php  -v

对我有用的解决方案是下载 Remi 的 RPM(尽管通过添加他的 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>
于 2016-10-30T00:46:18.947 回答