Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Zend Framework how to set headers

I have a question, how can I do something like this:

header("Content-Disposition: inline; filename=result.pdf"); 
header("Content-type: application/x-pdf"); 

With Zend Framework, I have tried:

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

But doesn't work correctly.

like image 521
Uffo Avatar asked Aug 25 '09 05:08

Uffo


3 Answers

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.

like image 107
Stefan Gehrig Avatar answered Oct 23 '22 10:10

Stefan Gehrig


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

like image 21
David Snabel-Caunt Avatar answered Oct 23 '22 09:10

David Snabel-Caunt


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.

like image 2
Justin Avatar answered Oct 23 '22 08:10

Justin