Zend Framework, как настроить заголовки
У меня вопрос, как я могу сделать что-то вроде этого:
header("Content-Disposition: inline; filename=result.pdf");
header("Content-type: application/x-pdf");
С Zend Framework я пробовал:
$this->getResponse()
->setHeader('Content-Disposition:inline', ' filename=result.pdf')
->setHeader('Content-type', 'application/x-pdf');
Но работает неправильно.
С наилучшими пожеланиями,
Ответы
Ответ 1
Ваше выражение о настройке заголовков ответов слегка искажено:
$this->getResponse()
->setHeader('Content-Disposition', 'inline; filename=result.pdf')
->setHeader('Content-type', 'application/x-pdf');
Вышеприведенное должно работать - обратите внимание на разницу в Content-Disposition
-header.
Кстати... Когда вы хотите принудительно загрузить окно загрузки (вместо загрузки документа в браузере), вы должны использовать Content-Disposition
attachment
.
$this->getResponse()
->setHeader('Content-Disposition', 'attachment; filename=result.pdf')
->setHeader('Content-type', 'application/x-pdf');
В зависимости от браузера, возможно, вам также нужно установить Content-Length
или изменить Content-type
на комбинацию (несколько заголовков) одного или нескольких из application/force-download
, application/octet-stream
и/или application/download
. И, как я писал в комментарии, иногда кеширование заголовков может помешать вашей загрузке. Проверьте, какие отправители кэширования отправлены.
Ответ 2
Поздно к таблице я могу рекомендовать этот помощник действий в качестве простого, многоразового компонента для отправки файлов или данных памяти в браузер.
Имеет параметры кэширования, расположения и может использовать Apache Sendfile
Ответ 3
Я предполагаю, что вы делаете что-то вроде:
$this->getResponse()
->setHeader('Content-Disposition:inline', ' filename=result.pdf')
->setHeader('Content-type', 'application/x-pdf');
fpassthru($filename);
exit();
или что-то в этом роде.
Ответ здесь никогда не будет отображаться (который отображает заголовки). Ответ обычно выполняется во время печати после операции.
Вам нужно будет напрямую установить заголовки (как вы отметили в коде без кода) или напрямую использовать $this->getResponse()->sendHeaders()
.
Ответ 4
У меня был набор заголовков.
Он не был установлен, но ДОБАВЛЕН.
Поэтому у меня был Content-Type текста /html, а также application/pdf.
Отметка Content-Type с помощью TRUE сделала возможной загрузку в IOS и других устройствах, которые отображали только критические символы после загрузки или ошибки:
->setHeader('Content-type', 'application/x-pdf', true);
setHeader($name, $value, $replace = false)
от:
https://framework.zend.com/manual/1.12/de/zend.controller.response.html
Ответ 5
решаемые
$this->getResponse()
->setHeader('Content-Disposition:inline', ';filename=result.pdf')
->setHeader('Content-Type', 'application/x-pdf');