下载php文件时随机添加字节

时间:2019-03-14 11:56:26

标签: php laravel file binary byte

我正在尝试从使用PHP的服务器下载二进制文件。 下载时,它会以某种方式在文件的开头随机添加一个字节:

结果下载(十六进制编辑器图像):

Hex editor image

预期结果下载(十六进制编辑器图像):

我尝试过的事情:
1.标头方式尝试1

$filename = 'spss-export.sav';
header("Content-Disposition: attachment; filename=survey_2_SPSS_syntax_file.sav");
header("Content-type: application/download; charset=UTF-8");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: public");
readfile($filename); // do the double-download-dance (dirty but worky)
exit;

2。标头方式尝试2

$filename = 'spss-export.sav';
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"" . basename($filename) . "\"");
readfile($filename); // do the double-download-dance (dirty but worky)
exit;

3。 Laravel响应下载

$filename = 'spss-export.sav';
return response()->download($filename);

标头方式产生的文件在开始时只具有随机字节,而laravel方式产生的是随机字节,而文件末尾则缺少一个字节。有人知道可能是什么问题吗?

1 个答案:

答案 0 :(得分:0)

我自己找到了一个答案: 您必须在文件输出之前添加 ob_end_clean()。 laravel框架以某种方式为文件增加了额外的空间。

如果这不起作用,请参考:
https://drupal.stackexchange.com/questions/163628/extra-space-at-beginning-of-downloaded-image/163644#163644