Это работало прошлой ночью, но я, должно быть, случайно что-то изменил, потому что это не сейчас.
То, что я пытаюсь сделать, должно быть ясно из этих заголовков:
Content-Disposition: attachment;filename=english_customizable.xml Location: http://tortoisewrath.com/files/2.xml
Однако, когда этот заголовок отправлен, часть- Content-Disposition
не работает после перенаправления.
…Зачем?
То, что вы пытаетесь сделать, нецелесообразно проверять этот вопрос; Расположение заголовка + Размещение контента
Заголовок Content-Disposition + Location
Но вы можете сделать это, чтобы заставить его работать, вам придется буферизировать весь ответ до его отправки. Вы можете сделать это с помощью буферизации вывода
Иначе браузер может интерпретировать заголовок Location
перед загрузкой файла. Это отрывочно, так что вы не должны этого делать.
Обратите внимание, что форсирование «сохранить как» с помощью Content-Disposition: attachment;
убедитесь, что клиент не перемещается в любом месте, поэтому метод, приведенный ниже, должен быть в любом случае.
Потоковая передача файла в php
Чтобы просто процитировать парня, у которого есть мозги, в нужном месте :
// To use header() with 'content-type', why don't you use mime_content_type() function rather than checking the type on the basis of extension? // Example code: <?php $file="test.docx"; header("Pragma: public"); header('Content-disposition: attachment; filename='.$file); header("Content-type: ".mime_content_type($file)); header('Content-Encoding: identity'); ob_clean(); flush(); readfile($file); ?> // Use $file to map to whichever type of file. // Note: the mime types should already be defined in apache settings
Источник: http://www.php.net/manual/en/function.header.php#107581
Обратите внимание, что в исходном ответе используется Content-Transfer-Encoding
который фактически не существует в HTTP. Комментарий ниже этого источника объясняет это: http://www.php.net/manual/en/function.header.php#107044