0

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

提前致谢

4

1 回答 1

1

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

$from = 1;
$to = 100;

while ($to < totalLines()) {
   getLines($from,$to);
   $from += 100;
   $to += 100;
   clearMemory();
}
于 2013-04-14T20:47:17.370 回答