donte1234567
donte1234567
2010-01-27 22:17

cURL没有正确下载图像

已采纳

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • dragon7713 dragon7713 11年前

    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.

    点赞 评论 复制链接分享
  • dousong2967 dousong2967 11年前

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

    Here is an example.

    点赞 评论 复制链接分享
  • doubian0284 doubian0284 11年前

    Try if this helps:

    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_TIMEOUT, 60);
    
    点赞 评论 复制链接分享
  • doucheng2210 doucheng2210 11年前

    Set:

    curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
    
    点赞 评论 复制链接分享

相关推荐