cURL下载二进制文件“双打”文件

We are using cURL to download files from one of our servers to our workflow server. I'm using the simple code pasted below, but my files are "doubling up" - twice the size, twice the length. Would seem the file is saved, then appended again, but I can't figure out why in the world that is happening.

Below is test code on my local machine behaving exact same way:

    $file_name = 'test.mp3';
    $copy_to_dir = 'C:/test_files/';
    $file_url  = 'C:/source_files/test.mp3';

    $fp = fopen ($copy_to_dir. '/' . $file_name, 'w');

    $ch = curl_init($file_url);

    curl_setopt_array($ch, array(
        CURLOPT_URL            => $file_url,
        CURLOPT_RETURNTRANSFER => 1,
        CURLOPT_FILE           => $fp,
        CURLOPT_TIMEOUT        => 50
    ));

    $results = curl_exec($ch);
    if(curl_exec($ch) === false)
    {
      //echo 'Curl error: ' . curl_error($ch);
        return false;
    }

    curl_close($ch);
    fclose($fp);

Original file is 9MB, copy is 18MB every time

EDIT: let this be a lesson to you not copy/paste code when you're in a hurry, to "save time". The second curl_exec() should be a curl_errno() or other error handling strategy - even just using fwrite() meant I would be downloading everything twice, so you don't want to just quit once you get a workaround

dongsou8980
dongsou8980 你正在调用curl_exec()两次!
接近 7 年之前 回复
duancaoqin6683
duancaoqin6683 好吧,不-我想出了一个解决方法,但这并不是它这样做的原因
接近 7 年之前 回复
dongpin1850
dongpin1850 那么你可以回答你自己的问题然后:)
接近 7 年之前 回复
dtzk85937
dtzk85937 是的,这就是我刚发现的作品。通过fwrite()而不是CURLOPT_FILE写
接近 7 年之前 回复
douluo5937
douluo5937 所以,如果你删除文件并写下$result,它会给你预期的结果吗?
接近 7 年之前 回复
duandu2159
duandu2159 不,不是真的。大量复制/粘贴。刚试过没有File,使用fwrite-期望的结果
接近 7 年之前 回复
doukunsan5553
doukunsan5553 你为什么要做返回转移并同时归档。任何原因?
接近 7 年之前 回复

1个回答



您正在调用 curl_exec()</ code>两次,因此它会下载文件两次。 更改:</ p>

  if(curl_exec($ ch)=== false)
</ code> </ pre>

to:</ p >

  if($ results === false)
</ code> </ pre>
</ div>

展开原文

原文

You're calling curl_exec() twice, so it downloads the file twice. Change:

if(curl_exec($ch) === false)

to:

if($results === false)

dongqiang8683
dongqiang8683 噶尔! 我知道这会是一种愚蠢的东西 - 没有办法像CURLOPT_FILE那样存在重大错误
接近 7 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问