由PHP生成的下载文件正在以大约47.2kb的速度被切断

时间:2016-01-04 16:47:39

标签: php sql-server

我目前正在开发一个将文件从MSSQL数据库中提取出来的实用程序。文件正文作为base64字符串存储在数据库中,我用PHP函数base64_decode()解码。要在页面打开时开始下载文件,我使用标题:

$filename = $file[0][0];
$file_body = base64_decode( $file[0][1] );
$size = $file[0][2];
$type = $file[0][3];

header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Content-Description: File Transfer");
header("Content-Length: $size;");
header("Content-Disposition: attachment; filename=$filename");
header("Content-Type: $type "); 
header("Content-Transfer-Encoding: binary");

echo $file_body;

文件下载,一切正常,直到文件大小超过48kb。之后,只下载了48kb的文件。我已经测试了许多文件类型,但仍然有相同的结果。根据我在网上发现的其他帖子的建议,我已经在php.ini中提升了php内存和帖子大小,但仍然没有运气。

我意识到PHP可能不是实现这一目标的最佳方式,但是,这是我可以使用的。

我总是下载有关如何确保完整文件的任何想法?

1 个答案:

答案 0 :(得分:0)

您无需在任何地方存储长度(大小)。您应该通过以下方式动态计算:

$size = strlen($file_body);
...
header("Content-Length: $size;");