2012-06-16 42 views
1

有沒有辦法將Zend_Filter_Encrypt用於大文件,而不會將內存限制上升到不可接受的數量?Zend_Filter_Encrypt和Memory

這是到目前爲止我的代碼,但是當我必須大於32 MB的文件進行加密(這就是我的內存限制)失敗,如果我設置內存48MB它的工作原理:

$vector = 'XX'; 

$algorithm = 'rijndael-192'; 

$options = array(
    'adapter' => 'mcrypt', 
    'vector' => $vector, 
    'algorithm' => $algorithm, 
    'key'  => $key 
); 

$encrypt = new Zend_Filter_File_Encrypt($options); 
$result = $encrypt->filter($file); 
+2

可能的重複:[如何讓一個程序做我想做的事,而不是一個程序做什麼?](http://slash7.com/2006/12/22/vampires/) – hakre

回答

2

沒有,不是。 Zend_Filter_Encrypt通過一次加密/解密數據來工作,因此需要完整的數據才能運行。

如果你需要解密一個大文件,你可以用更小的塊手動完成。

<?php 

$key = 'secret key'; 
$iv  = 'xxxxxxxxxxxxxxxx'; 
$cipher = mcrypt_module_open('rijndael-192', '', 'cbc', ''); 

mcrypt_generic_init($cipher, $key, $iv); 

$fp = fopen('/tmp/encrypted.txt', 'r+b'); 
while (!feof($fp)) { 
    $data = fread($fp, 1154); 

    $decrypted = mdecrypt_generic($cipher, $data); 

    echo $decrypted; 
} 

fclose($fp); 
mcrypt_generic_deinit($cipher); 
mcrypt_module_close($cipher); 

只要確保數據的閱讀量(FREAD)是由算法使用的塊大小的倍數,否則其結果可能是意想不到的。