benjy
benjy

Reputation: 4716

cURL not properly downloading images

I'm having a problem with cURL. I am downloading images and saving them to a folder. The file that cURL creates has the right filesize, which makes me think that the headers are being read properly. But, when I open the file up in my browser or in any picture-viewing application, only a tiny bit at the top appears to actually have been written. My code:

function _vancore_curl_savefile($url) {
  $url = str_replace("\"", "", $url);
  $basename = basename($url);
  $basename = str_replace("%20", "_", $basename);
  $var = file_directory_path() . "/van/" . $basename;
  $uvar = "files/van/" . $basename;
  $handle = fopen($var, "w");
  $curl = curl_init($url);
  curl_setopt($curl, CURLOPT_FILE, $handle);
  $result = curl_exec($curl);
  $result2 = $result;
  curl_close($curl);
  fclose($handle);
  return $uvar;
}

file_directory_path() is a Drupal function (this function is part of a Drupal module and called for each file that needs to be downloaded) that returns the path to the Drupal file download directory. I have confirmed through various tests that:

a) $url is what it should be
b) fopen() is opening the right file
c) curl_exec() is returning true after it is executed

I am very confused about what is going wrong here. Anyone have any thoughts?

TIA,
Benjy

Upvotes: 1

Views: 2834

Answers (4)

cwegrzyn
cwegrzyn

Reputation: 141

You don't happen to be using the curl library "emulation" in the Drupal curl module. Are you? That doesn't always work. Make sure you have the real PHP curl library installed.

Upvotes: 2

Kniganapolke
Kniganapolke

Reputation: 5393

May be you're missing curl_setopt($curl, CURLOPT_BINARYTRANSFER, 1); (along with CURLOPT_RETURNTRANSFER, as said above)

Here is an example.

Upvotes: 1

marcvangend
marcvangend

Reputation: 5642

Try if this helps:

curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_TIMEOUT, 60);

Upvotes: 1

code_burgar
code_burgar

Reputation: 12323

Set:

curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);

Upvotes: 1

Related Questions