Я пытаюсь принудительно загрузить файл, используя следующий код
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ÄÀ¢‘¡C
CENN / PK | ^ E ~ ИР3; user.csvUT ”: QT”: QTux ??? + — N-ŠÏLÑÉKÌMÕ) rÀŒ‚Äââòü ¢ .CÇ ”´DD (eibdlhbbdbÄPK | ^ EeHÐ’åû? definitions.sqlUT”: QT ”: QTux ??? ¥ Õo0 »É
Я провел много поисков в Google, у самого stackoverflow есть много вопросов по этому поводу, но большинство из них остались без ответа или не получили удовлетворительного ответа.
Подсказка: это может быть связано с выходным буфером.
Странные символы начинаются с «PK», поэтому я думаю, что вы смотрите на содержимое backup.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');