我在使用 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 内存泄漏