PHP内存不足读取blob

时间:2013-04-14 20:42:48

标签: php blob firebird

我有一个php函数来从blob字段中获取所有图像。

如下:

$db_corp = new PDO ("firebird:dbname=DATA.FDB;host=localhost", "sysdba", "masterkey");

$query_corp1= "Select CODPROD, ,FOTO From PRODUCT";

$result_corp1 = $db_corp->prepare($query_corp1);
$result_corp1->execute();
$result_corp1->bindColumn(1, $corp1_CODPROD);
$result_corp1->bindColumn(9, $corp1_FOTO, PDO::PARAM_LOB);

while($result_corp1->fetch()){
    if($corp1_FOTO){
        file_put_contents($corp1_CODPROD.".png",$corp1_FOTO);
    }
}

脚本运行良好,几乎占用了数据库中的一半照片,但在此过程中我遇到了以下错误。

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 480055 bytes)

我已经尝试过gc_enable();和gc_collect_cycles; 我的数据库有2100个产品,但有一半有图片,我需要将其提取到文件中。

先谢谢了

1 个答案:

答案 0 :(得分:1)

php.ini中内存使用量的增加可能有所帮助,但这只是一个肮脏的修复,而不是一个真正的解决方案。尝试每次检索100行,而不是清理一些内存并重新开始...在“伪代码”中:

$from = 1;
$to = 100;

while ($to < totalLines()) {
   getLines($from,$to);
   $from += 100;
   $to += 100;
   clearMemory();
}