HTTP标头内容长度mod_deflate问题

时间:2016-10-08 12:15:44

标签: php .htaccess http-headers content-length mod-deflate

您好,我在一个名为download.php的文件中有一个强制下载的HTTP标头。

PHP代码:

$file = 'https://www.website.com/downloads/'.$download->stitle.'.zip';
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));

下载开始没有问题,但总是损坏并且大小错误?

我正在使用gzip压缩,我认为导致内容长度不正确,因为文件是603kb,但下载窗口是2.2kb。

htaccess的:

# compress text, html, javascript, css, xml:
AddOutputFilterByType DEFLATE text/plain \
text/html \
text/xml \
text/css \
text/x-component \
application/atom+xml \
application/xml \
application/xhtml+xml \
application/rss+xml \
application/javascript \
application/x-javascript \
application/json \
application/vnd.ms-fontobject \
application/x-font-ttf \
application/x-font-woff \
application/font-woff2 \
application/x-web-app-manifest+json \
image/svg+xml \
image/x-icon


# Or, compress certain file types by extension:
<files *.html>
SetOutputFilter DEFLATE
</files> 

我添加了以下内容以排除zip文件和下载脚本:

SetOutputFilter DEFLATE
SetEnvIfNoCase Request_URI \.zip$ no-gzip dont-vary
SetEnvIfNoCase Request_URI download\.php$ no-gzip dont-vary

但下载的文件仍然损坏且大小错误(7.7kb)。 下载窗口现在不显示文件大小。

我做错了什么?

编辑:我收到警告:https://www.website.com/downloads/free-font-family-poppins.zip

的文件大小():stat失败

如果我转到该位置,文件开始以正确的大小下载,因此该文件存在,我还将文件和文件夹的权限更改为777,以检查它是否有权限问题,但仍然得到同样的错误。

1 个答案:

答案 0 :(得分:1)

找到了解决方案。

filesize()函数不接受HTTP或HTTPS。

将文件位置更改为服务器文件路径,现在运行正常。