PHP 强制下载适用于本地主机,但不适用于托管服务器


PHP force download works on localhost but not on hosting server

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

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

这在本地主机(xampp(上完全可以正常工作,但是当我上传到我的托管服务器时,它只是在屏幕上打印一些奇怪的字符,如下所示。

PK|^EWÌV†Ÿcredit_return.csvUT ":QT":QTux'u000beKƒ0 ÷>‹+Ù&ßÓ ÔdÁ¢P ̧"ÐB(Ê"Ñdôì÷L1ŒkŸâº¥©3/4cZæi(Ïm‰©ÜÃkÞ¦Ÿ~å0¬ r>¡«Ù°(...Ð說[Ó ̄Pt«: B]ñE3ºKª¯ª ÷G...»êJKs'B³ÓsšX v/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;'fuser.csvUT ":QT":QTux'u000b+-N-ŠÏLÑÉKÌMÕ(rÀŒ'Äââòü¢.CÇ"òÄÌD(eibdlhbbdbÄPK|^EeHÐ'åûdefinitions.sqlUT ":QT":QTux'u000b¥"o'0ð»é

我在谷歌上做了很多搜索,stackoverflow本身有很多关于这个问题的问题,但大多数都没有答案或没有得到令人满意的回答。

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

奇怪的字符以"PK"开头,所以我认为您正在查看备份的内容.zip(记住PKZIP(。您的浏览器似乎不知道如何处理它。

php 提供了一个例子:http://php.net/manual/en/function.readfile.php其中有更多的标题内容。可能会解决问题。

将其

声明为附件的标头在您的示例中没有引号。您可以在文件名周围使用双引号,并在文件名后使用额外的单引号,以使引号"正确"。

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

由于引号不正确,整个标题可能无效。

尝试以下操作。

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');
相关文章: