开发者

Cannot resume downloads bigger than 300M

开发者 https://www.devze.com 2023-02-06 16:43 出处:网络
I am working on a program with php to download files. the script request is like: http://localhost/download.php?file=abc.zip

I am working on a program with php to download files. the script request is like: http://localhost/download.php?file=abc.zip I use some script mentioned in Resumable downloads when using PHP to send the file?

it definitely works for files under 300M, either multithread or single-thread download, but, when i try to download a file >300M, I get a problem in single-thread downloading, I downloaded only about 250M data, then it seems like the http connection is broken. it doesnot break in the break-point ..Why? debugging the script, I p开发者_如何转开发inpointed where it broke:

$max_bf_size = 10240;
$pf = fopen("$file_path", "rb");
fseek($pf, $offset);
while(1)
{
    $rd_length = $length < $max_bf_size? $length:$max_bf_size;
    $data = fread($pf, $rd_length);
    print $data;
    $length = $length - $rd_length;
    if( $length <= 0 )
    {
        //__break-point__ 
        break;
    }

}

this seems like every requested document can only get 250M data buffer to echo or print..But it works when i use a multi-thread to download a file


fread() will read up to the number of bytes you ask for, so you are doing some unnecessary work calculating the number of bytes to read. I don't know what you mean by single-thread and multi-thread downloading. Do you know about readfile() to just dump an entire file? I assume you need to read a portion of the file starting at $offset up to $length bytes, correct?

I'd also check my web server (Apache?) configuration and ISP limits if applicable; your maximum response size or time may be throttled.

Try this:

define(MAX_BUF_SIZE, 10240);
$pf = fopen($file_path, 'rb');
fseek($pf, $offset);
while (!feof($pf)) {
    $data = fread($pf, MAX_BUF_SIZE);
    if ($data === false)
        break;
    print $data;
}
fclose($pf);
0

精彩评论

暂无评论...
验证码 换一张
取 消