Заголовки http — принудительная загрузка PHP работает на локальном хосте, но не на хост-сервере

Я пытаюсь принудительно загрузить файл, используя следующий код

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 ??? eK? Ƒ0 ÷> ‹+ Ù&ßÓ ÔdÁ ¢ P¸ «ÐB (Ê« Ñdôì ÷ L1ŒkŸâº ¥ © ¾cZæi) Ïm ‰ © ÜÃkÞ¦Ÿ? ~ å0¬r> ¡? «Ù ° (… Ð說 [Ó¯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ÄÀ¢‘¡CCENN / PK | ^ E ~ ИР3; user.csvUT ”: QT”: QTux ??? + — N-ŠÏLÑÉKÌMÕ) rÀŒ‚Äââòü ¢ .CÇ ”´DD (eibdlhbbdbÄPK | ^ EeHÐ’åû? definitions.sqlUT”: QT ”: QTux ??? ¥ Õo0 »É

Я провел много поисков в Google, у самого stackoverflow есть много вопросов по этому поводу, но большинство из них остались без ответа или не получили удовлетворительного ответа.

Подсказка: это может быть связано с выходным буфером.

0

Решение

Странные символы начинаются с «PK», поэтому я думаю, что вы смотрите на содержимое backup.zip (вспомните PKZIP). Ваш браузер, похоже, не знает, что с ним делать.

Вот пример, предоставленный php:
http://php.net/manual/en/function.readfile.php
который имеет больше заголовков. может сделать трюк.

Заголовок, который объявляет его как вложение, не имеет правильных кавычек в вашем примере.
Вы можете использовать двойные кавычки вокруг имени файла и дополнительную одинарную кавычку после имени файла, чтобы сделать кавычку «правильной».

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

Из-за неверных кавычек весь заголовок может не действовать.

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');
0

По вопросам рекламы [email protected]