带有CURL的PHP内存不足错误

带有CURL的PHP内存不足错误,curl,imagick,php,Curl,Imagick,Php,使用CURL检索远程图像时,我遇到一些致命错误 错误消息: PHP致命错误:内存不足(已分配786432)(尝试分配266241字节) 我有一个函数,用于检索远程图像并将其返回到变量: function download_file($file, $ref) { $curl_obj = curl_init(); curl_setopt($curl_obj, CURLOPT_URL, $file); curl_setopt($curl_obj, CURLOPT

使用CURL检索远程图像时,我遇到一些致命错误

错误消息: PHP致命错误:内存不足(已分配786432)(尝试分配266241字节)

我有一个函数,用于检索远程图像并将其返回到变量:

function download_file($file, $ref)
{   

    $curl_obj = curl_init();    
    curl_setopt($curl_obj, CURLOPT_URL, $file);
    curl_setopt($curl_obj, CURLOPT_HEADER, 0);
    curl_setopt($curl_obj, CURLOPT_REFERER, $ref);
    curl_setopt($curl_obj, CURLOPT_BINARYTRANSFER, 1);
    curl_setopt($curl_obj, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($curl_obj, CURLOPT_MAXREDIRS, 3);                           
    curl_setopt($curl_obj, CURLOPT_FOLLOWLOCATION, TRUE); //followlocation cannot be used when safe_mode/open_basedir are on
    curl_setopt($curl_obj, CURLOPT_SSL_VERIFYPEER, FALSE);               
    if(!$downloaded_binary = curl_exec($curl_obj)){
            $downloaded_binary = false; // downloading failed, return false
    }    

    curl_close($curl_obj);
    unset($curl_obj);
    return $downloaded_binary;
}
调用curl_exec时发生故障

背景

  • 失败不会发生在特定请求上
  • 内存限制已增加到3GB
  • Imagick用于执行图像转换任务
  • 每个图像小于100kb
  • 有些文件包含500-600个单独页面
  • 运行PHP 5.4.9(windows 64位)
  • 这是通过命令行运行的,没有连接到web服务器
  • 每条记录(包括记录中的所有图像)的平均处理时间为3.5秒
应用程序本身从专有文档管理系统导出图像(TIFF)数据,将相关图像转换为单个PDF文档,并将文件写入逻辑结构

失败对我来说没有意义,因为每个curl实例都应该是一个新句柄

在此方面的任何帮助或指导都将不胜感激

编辑

我相信我通过添加以下内容找到了问题的解决方案: IMagick::setResourceLimit(IMagick::RESOURCETYPE_内存,3072); IMagick::setResourceLimit(IMagick::RESOURCETYPE_MAP,3072)


在这篇文章中可以找到:

如果不再需要返回值,也需要将其取消设置。也许这就是内存泄漏的原因。谢谢你的回复!您建议在哪里取消链接?return语句不结束函数执行吗?还是我错了?在return语句之后取消设置($downloaded\u binary)似乎是合乎逻辑的,但我不确定这是否会得到执行。1.添加了$downloaded_binary=null;到函数2的开头。添加了gc_collect_循环();到主循环的末尾。此循环不在函数中。应用程序正在运行,我希望这将解决这个问题。