PHP强制下载适用于localhost,但不适用于托管服务器

时间:2014-10-29 21:30:27

标签: php http-headers xampp localhost web-hosting

我正在尝试使用以下代码强制下载文件

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='backup.zip');
header('Content-Length: '.filesize('backup.zip') );
readfile('backup.zip');

这在localhost(xampp)上工作得很好但是当我上传到我的托管服务器时,它只是在屏幕上打印一些奇怪的字符,如下所示。

  

PK | ^EWÌV†Ÿcredit_return.csvUT“:QT”:QTuxeKƒ0÷&gt; <+Ù&amp;ßÓÔdÁ¢P¸“ÐB(Ê”Ñdôì÷L1ŒkŸâ€¢¾cZæi)Ïm‰©ÜÃkÞ|Ÿ~å0¬ r&gt;Ù°(......Ð說[Ó¯Pt«:B]ñE3ºKª¯ª÷G ...»êJKs,B³ÓsšXv/qÊ™T%ØIƒ=°½mÑ°Cß–cÊÀ~ßM”r—ÒJ_hɼÑPK|^EÑàÀUävtxn_type.csvUT ”:QT”:QTux]‘KOB1…÷üŠ¬jBñYÂÂ’¸$Mï½3dnAø÷V!qŽ»v¾³8râu9ïiZW®oý~6Y¾Ü¡'­tàÝpvª°§æ¦Y“†…¤Ê‘¾bD§®Ûл* MŸú/Ï?ðñöb¾¶æ¼o0P‘ºÁ_K³‡‹äÒ« ­;kayRÂbUÔ»Ëu–F5‚^‚Bó꽜ÿB4-pÄÀ¢‘¡Cçëññ/ PK | ^E~ìa3; user.csvUT“:QT”:QTux + -N-ŠÏLÑÉKÌMÕ)rÀŒ,Äâ•.CÇ“òÄÌD(eibdlhbbdbÄPK| ^EeHÐ'åûdefinitions.sqlUT”:QT“:QTux¥ÕOo,0ð»É

我在google上做了很多搜索,stackoverflow本身有很多问题,但是大多数都没有答案或者没有得到满意答案。

提示:这可能与输出缓冲区有关。

2 个答案:

答案 0 :(得分:0)

奇怪的角色以&#34; PK&#34;开头,所以我认为你正在查看backup.zip的内容(记住PKZIP)。您的浏览器似乎不知道如何处理它。

php提供了一个例子: http://php.net/manual/en/function.readfile.php 它有更多的标题。可能会做到这一点。

将其声明为附件的标头在您的示例中没有正确的引号。 您可以在文件名后使用双引号,在文件名后使用额外的单引号来引用&#34;更正&#34;。

header('Content-Disposition: attachment; filename="backup.zip"');

由于报价不正确,整个标题可能无法生效。

答案 1 :(得分:0)

请尝试以下操作。

header('Content-Type: application/octet-stream');
header("Content-Disposition: attachment; filename='backup.zip'");
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile('backup.zip');
相关问题