Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
由PHP生成的下载文件在47.2kb左右被连续切断_Php_Sql Server - Fatal编程技术网

由PHP生成的下载文件在47.2kb左右被连续切断

由PHP生成的下载文件在47.2kb左右被连续切断,php,sql-server,Php,Sql Server,我目前正在开发一个实用程序,它可以从MSSQL数据库中提取文件。文件主体作为base64字符串存储在数据库中,我正在使用PHP函数base64\u decode()对其进行解码。要在页面打开时开始下载文件,我将使用标题: $filename = $file[0][0]; $file_body = base64_decode( $file[0][1] ); $size = $file[0][2]; $type = $file[0][3]; header("Expires: 0"); heade

我目前正在开发一个实用程序,它可以从MSSQL数据库中提取文件。文件主体作为base64字符串存储在数据库中,我正在使用PHP函数
base64\u 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可能不是实现这一点的最佳方式,但是,这是我所拥有的


您知道如何确保始终下载完整的文件吗?

您不需要在任何地方存储长度(大小)。您应按以下方式动态计算:

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

您不需要在任何地方存储长度(大小)。您应按以下方式动态计算:

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

您是否可以共享您实际创建的文件的代码,以便通过php发送该文件?@JorgeCampos已使用请求的代码进行更新。您是否使用错误报告(E_ALL)运行?并验证解码字符串的大小是否与您期望的完全一致。put:if(strlen($file_body)!=$size){抛出新的RuntimeException(“来自db!文件的损坏数据应该是“$size.”字节,但只有“.strlen($file_body)。”字节!”;}@hanshenrik如果我将解码的字符串打印到屏幕上,它将匹配我上传的内容。如果我使用从数据库中提取的文件大小,它似乎永远不会与字符串长度匹配。也许它已经被取整了?一些快速的搜索发现了一些可能有用的链接:和。我知道你不是在读文件,而是在流媒体内容,但这些可能会有所帮助。调用
echo
后是否需要
flush()
执行某些操作?是否可以共享您实际创建的文件代码,以便通过php发送该文件?@JorgeCampos使用请求的代码进行更新。是否使用错误报告(E_ALL)运行?并验证解码字符串的大小是否与您期望的完全一致。put:if(strlen($file_body)!=$size){抛出新的RuntimeException(“来自db!文件的损坏数据应该是“$size.”字节,但只有“.strlen($file_body)。”字节!”;}@hanshenrik如果我将解码的字符串打印到屏幕上,它将匹配我上传的内容。如果我使用从数据库中提取的文件大小,它似乎永远不会与字符串长度匹配。也许它已经被取整了?一些快速的搜索发现了一些可能有用的链接:和。我知道你不是在读文件,而是在流媒体内容,但这些可能会有所帮助。在调用
echo
后,是否需要
flush()
执行某些操作?进行此更改后,我仍然得到相同的结果。进行此更改后,我仍然得到相同的结果。