php Curl下载tbz文件?

php Curl下载tbz文件?,php,curl,download,Php,Curl,Download,我查了一下,也用谷歌搜索了一下,但没有找到解决问题的方法 我想下载一个扩展名为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();

我查了一下,也用谷歌搜索了一下,但没有找到解决问题的方法

我想下载一个扩展名为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为单位的,当我执行此操作时,我会得到一个更大的文件。如果我运行代码时文件大小为16m,则需要花费大量时间,而手动停止时文件大小为146MB。我做错了什么?

我不认为您试图访问的文件类型对代码的工作方式有多大影响

首先,当设置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);

尽管我会在提交任何东西之前亲自测试错误(除非这只是个人一次性使用)。

谢谢您的回复。我以前也尝试过同样的代码,但这只在我的目录中创建了1KB的文件。所以我想用文件处理的方式来做。这段代码只为我创建了一个1KB的文件,而不是实际大小。我怀疑文件处理会弄乱你的文件-更有可能的是,外部服务器发送的是1KB响应,而不是你所期望的。许多可能的原因,例如,这会将用户重定向到实际文件,或者站点需要POST请求,或者站点需要某个用户代理头等。请检查此文件的内容,看看是否可以从中收集任何内容。