现在的位置: 首页 -> PHP学习 -> php中Accept-Length获取不到下载文件的大小

php中Accept-Length获取不到下载文件的大小

2015-05-07 23:41评论数 3 ⁄ 被浏览 12740 views+

php中在做文件下载的时候,其中要加上这么一些header信息:

header("Content-type: application/octet-stream");
header("Accept-Ranges: bytes");
header("Accept-Length:".$fileSize); //请用Content-Length
header("Content-Disposition: attachment; filename=".$fileName);


我已经加了header("Accept-Length:".$fileSize);这句话,可是还是出现如下图的情况,获取不到下载文件的大小,虽然不影响正常的功能,但是为了追求完美,我要探个究竟。


Accept-Length下载获取不到文件大小


查手册,搜资料,最后才发现header("Accept-Length:***");这其实是一个误导,真不明白网上为什么千篇一律的都是Accept-Length。代潇瑞博客告诉大家,其实正确的应该是header("Content-Length:***"); 修改之后,果然就正确了,如下图的效果。


Content-Length下载获取到了文件大小


将Accept-Length改成Content-Length后,终于可以识别下载文件的大小了。


要注意的是:如果网站对下载文件对应的格式(如.doc)设置了gzip压缩,那么Response Headers中就没Content-Length了,因此下载文件就看不到大小。还有一种,如果设置了Transfer-Encoding,Content-Length也将会被忽视,也就是有了gzip、Transfer-Encoding,则不能有Content-Length。(原因:Content-Length既表示实体长度,又表示传输长度。如果实体长度和传输长度不相等(比如说设置了gzip或者Transfer-Encoding),那么则不能设置Content-Length)

 

文章出自:https://www.daixiaorui.com/read/149.html 本站所有文章,除注明出处外皆为原创,转载请注明本文地址,版权所有。

目前有 3 条评论  @我要评论

  1. 3楼丁宜 : 2019-07-21 03:35:48 评论说: @回复

    对,开启gzip就未知大小了,好像只能关的他,不然没法。。。

  2. 2楼木头人 : 2018-02-05 17:31:12 评论说: @回复

    非常好,网上抄袭和敷衍太多了,很多都是一个错误的内容!

  3. 1楼nicklin : 2015-09-23 08:25:28 评论说: @回复

    我的pdf下载修改了还是未知大小

    回复留言标识 popl 回复 nicklin: 可能是网站设置了gzip压缩吧,见本文最后一段的解释。

    2017-07-08 11:15:03  @回复

您的每一个评论都是对我的一份支持

 博客二维码

昵称 *

邮箱 *