mcrypt安装的问题

时间:2011-01-26 20:21:52

标签: 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);

现在,从这段代码开始:

$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。该目录存在,但它没有文件...

Here is the print screen of the file manager.

感谢。

6 个答案:

答案 0 :(得分:35)

试试这个问题:

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然后重试?

答案 1 :(得分:5)

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

apt-get install php5-mcrypt
php5enmod mcrypt
service apache2 restart

答案 2 :(得分: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

取决于您的设置。

答案 3 :(得分: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

答案 4 :(得分:-1)

如何在MAC OSX上安装mcrypt:

您好,测试并使用Mac OSX El Capitan:

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

2。把它放在:

  

/ usr / lib中/ PHP /扩展/ mcrypt的

3。修改你的'php.ini'

  

/etc/php.ini中

并添加以下行:

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

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

  

php -m

php -m console result

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

<?php echo phpinfo(); ?>

并查看是否列出了mcrypt:

phpinfo() shows now mcrypt to be loaded

是的,我知道我是黑帮。

答案 5 :(得分:-1)

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

更新:此解决方案解释了如何在Centos 6上从Remi的RPM手动安装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 /opt/rh/php54

中被chroot

简单地复制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)< / p>

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>