1

我在使用 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_MEMORY, 3072); IMagick::setResourceLimit(imagick::RESOURCETYPE_MAP, 3072);

在这篇文章中发现:PHP Imagick 内存泄漏

4

0 回答 0