Content-Disposition с перенаправлением 302

Это работало прошлой ночью, но я, должно быть, случайно что-то изменил, потому что это не сейчас.

То, что я пытаюсь сделать, должно быть ясно из этих заголовков:

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