システム管理者に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 ([email protected])
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
。ディレクトリは存在しますが、ファイルがありません...
ありがとう。
Ubuntu 14.04では、Sudoとして3つの手順を実行するだけで済みます。
apt-get install php5-mcrypt
php5enmod mcrypt
service Apache2 restart
私はまったく同じ問題を抱えていました。
> 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
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=
シェルアクセス権がある場合は、次のコマンドを試して、mcryptインストール用のlibディレクトリを見つけることができます。
whereis libmcrypt
または...
whereis mcrypt
設定によって異なります。