PHP内存溢出读取blob


PHP out of memory reading blob

我有一个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个产品,但一半有图片,我需要将其提取到一个文件。

Thanks in advancer

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

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