【问题标题】:Not enough chunks in my chunksize - PHP download script result in 20% file size download我的块大小中没有足够的块 - PHP 下载脚本导致 20% 的文件大小下载
【发布时间】:2011-07-19 07:06:41
【问题描述】:

试图下载整个文件——但我假设脚本正在退出流中的第一个 chunksize 通道。

需要对什么进行编码才能获得完整的文件大小下载?

$image_link=$_GET['image_link'];
$fullPathDL=$path0.$image_link;
$fsize = 文件大小($fullPathDL);
$path_parts = pathinfo($fullPathDL);
if ($fd = fopen($fullPathDL, "rb")) {
    $fsize = 文件大小($fullPathDL);
    header("内容类型:应用程序/jpg"); // 在此处添加更多的 diff 标头。扩展
    header("内容配置:附件;文件名=\"".$path_parts["basename"]."\""); // 使用 'attachment' 强制下载
    header("内容长度:$fsize");
    // header("缓存控制:私有"); //使用这个直接打开文件
        而(!feof($fd)){

        $buffer = fread($fd, 8192); 

        echo $buffer;
    }

fclose ($fd);
exit;

}

【问题讨论】:

  • 到底发生了什么?我不明白。
  • 你在说什么块?您没有要求分块传输编码,也没有为分块传输编码创建语法正确的块......

标签: php download


【解决方案1】:

您的示例不起作用的原因是完全存在于缓冲区中。 自从我查看标准以来已经有一段时间了,但至少我可以让你朝着正确的方向迈出一步。基本上,当从分块传输中读取时,我认为前几个字节代表了块中的字节数。像这样的东西(取自维基百科)。

25
This is the data in the first chunk

1C
and this is the second one

3
con
8
sequence
0

你基本上需要检查要读取的字节数,读取字节数,然后重复,直到要读取的字节数为0。

完成此操作的最简单方法是在请求标头中指定 HTTP 1.0(不支持分块传输),或使用为您处理此问题的库,即 CURL。

【讨论】:

  • 是的,我考虑过 CURL,但坦率地说,我希望有一种比找出另一个库练习更简单的方法。但是谢谢,约翰,会试一试的。
猜你喜欢
  • 1970-01-01
  • 2019-01-20
  • 1970-01-01
  • 2010-12-30
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
  • 2010-10-23
  • 1970-01-01
相关资源
最近更新 更多