我的块大小中没有足够的块 - PHP 下载脚本导致 20% 的文件大小下载

Posted

技术标签:

【中文标题】我的块大小中没有足够的块 - PHP 下载脚本导致 20% 的文件大小下载【英文标题】:Not enough chunks in my chunksize - PHP download script result in 20% file size download 【发布时间】: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;

【问题讨论】:

到底发生了什么?我不明白。 你在说什么块?您没有要求分块传输编码,也没有为分块传输编码创建语法正确的块...... 【参考方案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,但坦率地说,我希望有一种比找出另一个库练习更简单的方法。但是谢谢,约翰,会试一试的。

以上是关于我的块大小中没有足够的块 - PHP 下载脚本导致 20% 的文件大小下载的主要内容,如果未能解决你的问题,请参考以下文章

计算C中嵌套目录中文件的块大小

如何使用 Laravel 的块来避免内存不足?

如何使 openssl_encrypt 将输入填充到所需的块大小?

更改 dfs 文件的块大小

如何在 CUDA 中自动计算 2D 图像的块和网格大小?

使用由列变量确定的块大小加载熊猫数据框