php curl下载tbz文件?

时间:2011-10-11 05:12:13

标签: php curl download

我检查了SO并且也用谷歌搜索但没有找到任何方法来解决我的问题。

我想下载一个带有tbz扩展名的文件,但它给我的错误是

Warning: feof() expects parameter 1 to be resource, string given in D:\xampp\htdocs\test\testing.php on line **

我正在使用curl从服务器下载此文件。

        set_time_limit(0);
        $ch = curl_init();
        $timeout = 0;
        curl_setopt ($ch, CURLOPT_URL, $webpage_url);
        curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);

        $handler = curl_exec($ch);

        $fp = fopen("adminArea/test/$file", "w+");
        $contents = '';
        while (!feof($handler)) {
          $contents .= fread($handler, 8192);
          fwrite($fp, $handler);
        }
        fclose($fp);

        curl_close($ch);  

我的文件是MB,当我执行这个时,我得到一个更大的文件。如果我的文件是16米的大小,当我运行代码时,它需要很多时间,当我手动停止它时,它是146MB的大小。我做错了什么?

1 个答案:

答案 0 :(得分:0)

我不相信您尝试访问的文件类型会对代码的工作方式产生很大影响。

首先,当设置CURLOPT_RETURNTRANSFER时,curl_exec将返回数据。 其次,feof,fread等需要文件句柄,而不是cURL句柄或返回的数据(这就是为什么你的错误信息显示你正在发送字符串)。

您的代码可能应该是这样的:

    set_time_limit(0);
    $ch = curl_init();
    $timeout = 0;
    curl_setopt ($ch, CURLOPT_URL, $webpage_url);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);

    file_put_contents("adminArea/test/$file", curl_exec($ch));
    curl_close($ch);

虽然我会在提交任何内容之前亲自测试错误(除非这是个人一次性使用)。