CURL的PHP​​内存不足错误

i'm experiencing some fatal errors when using CURL to retrieve remote images.

Error Message: PHP Fatal error: Out of memory (allocated 786432) (tried to allocate 266241 bytes)

I have a function designed to retrieve the remote image and return it to a variable:

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;
}

The failure occurs when curl_exec is called.

Background

  • The failure does not occur on a specific request
  • The memory limit has been increased to 3GB
  • Imagick is used to perform image conversion tasks
  • Each image is under 100kb
  • Some documents contain 500-600 individual pages
  • Running PHP 5.4.9 (windows 64 bit)
  • This is run through the command line and is not attached to a web server
  • Average processing time per record (includes all images in record) is 3.5 seconds.

The application itself exports image (TIFF) data from a proprietary document management system, converts the associated images into a single PDF document and writes the files out to a logical structure.

The failure does not make sense to me, since each curl instance should be a new handle.

Any help or direction on this would be greatly appreciated!

EDIT

I believe I found the resolution to the issue, by adding the following lines: IMagick::setResourceLimit(imagick::RESOURCETYPE_MEMORY, 3072); IMagick::setResourceLimit(imagick::RESOURCETYPE_MAP, 3072);

Found in this post: PHP Imagick memory leak