服务器问答

PHP 文件下载,如果使用流下载的话前面不能有输出,所以各位大佬这应该怎么搞喃??
0
2021-05-10 14:46:32
idczone
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);
}
downL大带宽服务器oad("D:\\xampp\htdocs\aa.zip","aa.zip");

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



有 content-disposition:attachement 的 http header,浏览器就不会直接打开而是会提示下载了,不管是用 apache 还是 lighty 还是 nginx 或是 caddy,都可以很容易地给特定的 URL 的响应加上这个 header,根本不用走到 PHP 这里。

public function download($params){
}
---------------------------------------------------
我首先在服务器压缩好了文件,然后拿到服务器存储的文件名和文件路径,

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);
}
---------------------------------------------------
我首先在服务器压缩好了文件,然后拿到服务器存储的文件名和文件路径

ob_clean



知道如何下载,现在主要的矛盾是:必须用 header 下载,因为有图片文档格式;但是下载之前是有输出的,不然给用户一个空白的下载页也不好吧。
而 header 之前是不能有输出的,html 也不行,矛盾就体现在这里!

我前面也是定位到缓存这方面,想着清空缓存或者关闭缓存会有效果,但是前面有一个输出,它的默认 header 好像就变成了 text 了,后面要下载文件定义的 header 就失效了,即使是压缩包也会在浏览器上显示一堆乱码。。。

下载前的页面要做成单独的页面

现在也只能这样了。。。。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服