Zend Framework how to set headers

My guess is that you're doing something like:

$this->getResponse()
        ->setHeader('Content-Disposition:inline', ' filename=result.pdf')
        ->setHeader('Content-type', 'application/x-pdf');
fpassthru($filename);
exit();

or something.

The response here will never be rendered (which renders the headers). The response is rendered during post-action printing, usually.

You will have to directly set the headers (as you noted in the non-oo code), or use $this->getResponse()->sendHeaders() directly.


Late to the table, I can recommend this action helper as a simple, reusable component for sending files or in memory data to the browser.

Has options for caching, disposition and can utilise Apache Sendfile


Your statement to set the response headers is slightly malformed:

$this->getResponse()
     ->setHeader('Content-Disposition', 'inline; filename=result.pdf')
     ->setHeader('Content-type', 'application/x-pdf');

The above should work - please note the difference in the Content-Disposition-header.

By the way... When you want to force a download box (instead of loading the document in the browser) you should use the Content-Disposition attachment.

$this->getResponse()
     ->setHeader('Content-Disposition', 'attachment; filename=result.pdf')
     ->setHeader('Content-type', 'application/x-pdf');

Depending on the browser it may be possible that you also have to set the Content-Length or change the Content-type to a combination (multiple headers) of one or more of application/force-download, application/octet-stream and/or application/download. And as I wrote in the comment sometimes caching headers may interfere with your download. Check to see which caching-headers are sent.