php中curl下载大文件,边下载边保存如何实现啊?这个问题好难啊

坚慧 发布于 2014/03/23 16:22
阅读 5K+
收藏 4
<?php
/*
Author: Keyvan Minoukadeh
For more info on CURLOPT_HEADERFUNCTION and CURLOPT_WRITEFUNCTION see:
<http://curl.haxx.se/libcurl/c/curl_easy_setopt.html>
*/

$ch = curl_init();
//下载一个超过1G的大文件
curl_setopt($ch, CURLOPT_URL, 'http://www.sample.net/a_big_file_more_than_1G.zip');
// Set callback function for headers
curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'read_header');
curl_setopt($ch, CURLOPT_BUFFERSIZE, 204800000);
// Set callback function for body
curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'read_body');

curl_exec($ch);

if ($error = curl_error($ch)) {
    echo "Error: $error<br />\n";
}

// define callback functions

// Notes from <http://curl.haxx.se/libcurl/c/curl_easy_setopt.html>:
// Return the number of bytes actually written or return -1 to signal error to
// the library (it will  cause it to abort the transfer with a CURLE_WRITE_ERROR
// return code). (Added in 7.7.2)
function read_header($ch, $string)
{
    $length = strlen($string);
    echo "Header: $string<br />\n";
    return $length;
}

// Notes from <http://curl.haxx.se/libcurl/c/curl_easy_setopt.html>:
// Return the number of bytes actually taken care of.  If that amount differs
// from the amount passed to your function, it'll signal an error to the library
// and it will abort the transfer and return CURLE_WRITE_ERROR.
function read_body($ch, $string)
{
    $length = strlen($string);
    echo "Received $length bytes<br />\n";
    return $length;
}

?>

各位大侠,有个问题,现在要用curl下载一个超过1G的大文件,希望能设置1个2M的缓冲,每收到2M文件,就保存一次,然后继续下载后面的2M继续保存,请问该怎么做啊?这个问题好难啊!


加载中
0
pikeman_ff
pikeman_ff
建议你用chunked传输,或者用range没2m作为一个独立的请求。
0
Midnight
Midnight
这个已经不是PHP能处理的范畴了
0
坚慧
坚慧

引用来自“pikeman_ff”的答案

建议你用chunked传输,或者用range没2m作为一个独立的请求。

非常感谢!

对方是否回复chunked不可控制,只能试一试用range了。。。

如果不知道要下载文件的大小,小的有几百k,大的有几个G,第一次申请range的时候,怎么写呢?


坚慧
坚慧
回复 @pikeman_ff : 多谢!
pikeman_ff
pikeman_ff
自己建个web server测试一下吧。超过单位应该也能有返回的。或者查下rfc.
0
Tuesday
Tuesday

楼主好像在问C#问题.

0
knuthfan
knuthfan

给curl指定CURLOPT_FILE一个文件句柄,将交给curl去处理。

可以参考这里:http://www.yiguoluandun.com/2014/04/15/php_curl_big_file_download/

返回顶部
顶部