Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.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页面_Php - Fatal编程技术网

将二进制文件编码到php页面

将二进制文件编码到php页面,php,Php,我想将二进制文件编码为base64并将其放入php页面(与代码内联),当请求该页面时,它将文件流式传输到浏览器,弹出下载对话框。 有什么想法吗也许这个例子可以帮助你 问候 似乎很简单。与使用一样,使用http头强制下载,然后回显编码字符串 $decoded_data = base64_decode($encoded_data); header('Content-Description: File Transfer'); header('Content-Type: application/oct

我想将二进制文件编码为base64并将其放入php页面(与代码内联),当请求该页面时,它将文件流式传输到浏览器,弹出下载对话框。

有什么想法吗

也许这个例子可以帮助你


问候

似乎很简单。与使用一样,使用http头强制下载,然后回显编码字符串

$decoded_data = base64_decode($encoded_data);

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . strlen($decoded_data);
ob_clean();
flush();
echo $decoded_data;
exit;

嗯,它是
printbase64_解码('02FAF…)
如果该文件大于PHP解释器可用的内存,则不可行。Mario,将此usegul答案发布为答案本身,而不是作为注释:)@Mario谢谢,如果该文件很大,有什么方法可以流式处理它吗?是的。然后将二进制数据存储在一个单独的文件中。现在很清楚,非常感谢@marioI不会立即否决你的意见,但如果你不解决它,我可能。。。您已经对字符串进行了两次解码,一次用于获取数据长度,另一次用于输出数据。您应该将
base64_decode()
的结果存储在variable中,并将变量传递给
strlen()
echo
-如果数据是100MB怎么办?好的观点。我仍然不建议对大文件使用这种方法,因为整个文件都加载到内存中,但至少这样它只被解码一次。我个人根本不建议这样做,几乎没有理由这样做。我承认,在一个文件中创建一个完整的应用程序可能是一件好事(这是我能想到的唯一合理的理由),但较小的美学增益与较大的性能成本使得它实际上不可行。但是你的答案是好的,如果设计得有点过度-缓存头最好设置为客户端缓存,因为脚本中的字符串是静态的,并且在提供文件时有很大的开销,仅供参考,没有像
内容传输编码这样的HTTP头