我有這個PHP函數(使用PHP 5.3),我用它來解密文件,它曾經工作得很好,但現在,我搬到了亞馬遜的EC2,它似乎mcrypt安裝已損壞或根本不可用。PHP mcrypt_module_open導致500錯誤
初步測試表明,文件解密並在較小的文件的工作,但不能在20MB +文件(這是不是一個特別大的大小)。
我跟蹤這個問題到這條線,這是造成錯誤500(我不越來越mcrypt_module_open is undefined
,僅有500服務器錯誤)
$td = mcrypt_module_open ('rijndael-128', '', 'cbc', '');
有什麼奇怪的,我查/etc/php.ini,我根本看不到mcrypt(假設我正在查看正確的php.ini /路徑!)
PHP代碼/函數是:
function decrypt_file ($inputfile, $outputfile)
{
$key = FILE_KEY; // <-- assign private key
$buffersize = 16384;
// Open $inputfile for reading binary
$input = fopen ($inputfile, 'rb');
// Error opening $inputfile, return false
if (!$input)
return false;
// Open $outputfile for writing binary
$output = fopen ($outputfile, 'wb');
// Error opening $outputfile, return false
if (!$output)
return false;
// Open the cipher module
$td = mcrypt_module_open ('rijndael-128', '', 'cbc', '');
// Read the IV from $inputfile
$iv = fread ($input, 16);
// Compute the SHA512 of the IV (salt) and Key and use 32 bytes (256 bit) of the result as the encryption key
$keyhash = substr (hash ('sha512', $iv . $key, true), 0, 32);
// Intialize encryption
mcrypt_generic_init ($td, $keyhash, $iv);
while (!feof ($input))
{
$buffer = fread ($input, $buffersize);
// Encrypt the data
$buffer = mdecrypt_generic ($td, $buffer);
// Remove padding for last block
if (feof ($input))
{
$padsize = ord ($buffer[strlen ($buffer) - 1]);
$buffer = substr ($buffer, 0, strlen ($buffer) - $padsize);
}
// Write the encrypted data to $output
fwrite ($output, $buffer, strlen ($buffer));
}
fclose ($input);
fclose ($output);
// Deinitialize encryption module
mcrypt_generic_deinit ($td);
// Close encryption module
mcrypt_module_close ($td);
return true;
}
任何人知道如何解決這個問題?我使用PHP 5.3和CodeIgniter 2.1(認爲這很可能是與CodeIgniter無關)
這是什麼'的var_dump(function_exists( 'mcrypt_module_open'));'說什麼?它說「TRUE」,錯誤日誌說什麼? – DaveRandom
不,它說'bool(false)',所以我想我需要安裝模塊或啓用它? – TheDude
是的,看起來你沒有安裝mcrypt。嘗試從您的實例的命令行運行'sudo yum install php-mcrypt'。 – DaveRandom