Kide
Kide

Reputation: 141

problem with mcrypt installation

I've asked the system admins to install mcrypt on the server, and they say everything is OK. But when I run my simple script I get this.

Warning: mcrypt_get_iv_size() [function.mcrypt-get-iv-size]: Module initialization failed

It's coming from this line:

$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256,MCRYPT_MODE_ECB);

Now, from this code:

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

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

I get:

Warning: mcrypt_list_algorithms() [function.mcrypt-list-algorithms]: No algorithms found in module dir

When I run this:

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

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

I get:

Warning: mcrypt_list_modes() [function.mcrypt-list-modes]: No modes found in module dir

However, running this command this command

which mcrypt; mcrypt -v

Produces:

/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 ([email protected])

Is mcrypt installed/configured correctly?

UPDATE:

I did this:

whereis libmcrypt

...and got the result:

libmcrypt: /usr/local/lib/libmcrypt /usr/local/lib/libmcrypt.so /usr/local/lib/libmcrypt.la

I've also changed:

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

to...

$modes = mcrypt_list_modes("/usr/local/lib/libmcrypt");
$algorithms = mcrypt_list_algorithms("/usr/local/lib/libmcrypt");

As recommended, but still get the error:

Warning: mcrypt_list_modes() [function.mcrypt-list-modes]: No modes found in module dir in

Then I went into the file manager in my CPanel to /usr/local/lib/libmcrypt. The directory exists but it has no files in it...

Here is the print screen of the file manager.

Thanks.

Upvotes: 14

Views: 36771

Answers (6)

Architecture: Centos 6 / Apache 2.2 / Dual PHP installation (5.3 and 5.4)

UPDATE: This solution explains how to install the module mcrypt with PHP 5.4 manually from Remi's RPM on Centos 6, but this RPM requires glibc-2.14+, so this only is not enough to make it work, if your glibc is older than that.

In my configuration, Yum install php-mcrypt* showed as installed the version for 5.3 in normal root:

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

However, 5.4 is chrooted in /opt/rh/php54

Simply copying the 5.3 modules and config files does not work. The module fails initialization, that's why it does not appear in phpinfo(), this can be checked with

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

The solution that worked for me is to download the Remi's RPM (although it's normally easier to install it by adding his Yum repository as discussed in the Comments) (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

extract the files with 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

And copy to the chroot folder

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/

To check:

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

And also:

<html>
<body>
<?php
phpinfo();
?>
</body>
</html>

Upvotes: -1

Purple Dragon
Purple Dragon

Reputation: 5298

How to install mcrypt on MAC OSX:

Hello, tested and working on Mac OSX El Capitan:

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

2. Place it in:

/usr/lib/php/extensions/mcrypt

3. Modify your 'php.ini'

/etc/php.ini

and add the following line:

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

4. Check if 'mcrypt' is loaded with the following command:

php -m

php -m console result

5. Create a 'phpinfo.php' with content:

<?php echo phpinfo(); ?>

and see if mcrypt is listed:

phpinfo() shows now mcrypt to be loaded

Yes, I know I'm a gangsta.

Upvotes: -1

Ernest
Ernest

Reputation: 2209

On Ubuntu 14.04 just need to do only three steps as sudo:

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

Upvotes: 5

Akarsh Satija
Akarsh Satija

Reputation: 1805

Try this for your mcrypt problem:

mv -i /etc/php5/conf.d/mcrypt.ini /etc/php5/mods-available/
sudo php5enmod mcrypt
sudo service apache2 restart

It's a bug with the location of the mcrypt.ini file.

I had the same bug, I did a cp instead of a mv to be sure but it solved the problem.

For PHP not working, if you get phpmyadmin working (even with the mcrypt error), it means PHP is working (because phpmyadmin uses PHP). But in your example

<? echo $row['details']; ?>
change <? to <?php and try again?

Upvotes: 35

Charles
Charles

Reputation: 9

I had exactly the same problem.

> 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 [...]

It was solved by reconfiguring and recompiling libmcrypt with these options:

./configure --prefix=$YOUR_PATH/libmcrypt --enable-dynamic-loading --disable-posix-threads

Then in your php.ini :

mcrypt.algorithms_dir=<YOUR_PATH>/libmcrypt/lib/libmcrypt
mcrypt.modes_dir=<YOUR_PATH>/libmcrypt/lib/libmcrypt

Upvotes: 0

netcoder
netcoder

Reputation: 67685

The mcrypt algorithms directory must be a directory containing the algorithms, not a binary. This means that this:

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

Should be this instead (assuming mcrypt is installed is /usr/local/lib/libmcrypt):

$modes = mcrypt_list_modes("/usr/local/lib/libmcrypt");

If the directory where libmcrypt is installed is not that one above, you have to update your php.ini setting. Taken from 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=

If you have shell access, you can try this command to find the lib directory for your mcrypt installation:

whereis libmcrypt

or...

whereis mcrypt

Depending on your setup.

Upvotes: 0

Related Questions