PHP 文件下载,如果使用流下载的话前面不能有输出,所以各位大佬这应该怎么搞喃??

2019-12-02 18:07:07 +08:00
 lysS
function downLoad($file_path,$new_name)
{
    if (file_exists($file_path)==FALSE){
        return 0;
    }
    $file=$file_path;
	$fileinfo=finfo_open(FILEINFO_MIME_TYPE);
	$mimeType=finfo_file($fileinfo,$file);
	finfo_close($fileinfo);
	header('Content-type:$mimeType');	//发送指定指定文件 MIME 类型的头信息报文
	header('Content-Disposition:attachement;filename='."$new_name");	//文件名字 aaA.doc 
	header('Content-Length:'.filesize($file));	//文件大小
    readfile($file);
}
downLoad("D:\\xampp\htdocs\aa.zip","aa.zip");

必须使用流下载,因为有图片,不然浏览器会解析。
好多这样的交互情景是下载的压缩包,比如下载个软件,难道他们自己放的链接??

4324 次点击
所在节点    服务器
8 条回复
dorentus
2019-12-02 18:49:52 +08:00
有 content-disposition:attachement 的 http header,浏览器就不会直接打开而是会提示下载了,不管是用 apache 还是 lighty 还是 nginx 或是 caddy,都可以很容易地给特定的 URL 的响应加上这个 header,根本不用走到 PHP 这里。
callme
2019-12-02 18:57:15 +08:00
public function download($params){

}
---------------------------------------------------
我首先在服务器压缩好了文件,然后拿到服务器存储的文件名和文件路径,
callme
2019-12-02 18:57:58 +08:00
public function download($params){
$fileName = $params['fileName'];
$downloadPath = $params['path'];
header('Content-Type:application/x-compressed-tar;charset=utf-8');
header('Content-disposition:attachment;filename='.$fileName);
$filesize = filesize($downloadPath);
readfile($downloadPath);
header('Content-length:'.$filesize);
unlink($downloadPath);
}
---------------------------------------------------
我首先在服务器压缩好了文件,然后拿到服务器存储的文件名和文件路径
zsdsz
2019-12-02 19:00:01 +08:00
ob_clean
lysS
2019-12-02 21:50:10 +08:00
@dorentus
@callme
知道如何下载,现在主要的矛盾是:必须用 header 下载,因为有图片文档格式;但是下载之前是有输出的,不然给用户一个空白的下载页也不好吧。
而 header 之前是不能有输出的,html 也不行,矛盾就体现在这里!
lysS
2019-12-02 21:58:16 +08:00
@zsdsz 我前面也是定位到缓存这方面,想着清空缓存或者关闭缓存会有效果,但是前面有一个输出,它的默认 header 好像就变成了 text 了,后面要下载文件定义的 header 就失效了,即使是压缩包也会在浏览器上显示一堆乱码。。。
dorentus
2019-12-03 07:31:22 +08:00
@lysS 下载前的页面要做成单独的页面
lysS
2019-12-03 09:28:32 +08:00
@dorentus 现在也只能这样了。。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/625193

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX