web-dev-qa-db-ja.com

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');

しかし、正しく動作しません。

宜しくお願いします、

31
Uffo

応答ヘッダーを設定するためのステートメントの形式が少し間違っています:

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

上記は機能するはずです-Content-Disposition- headerの違いに注意してください。

ちなみに...(ブラウザにドキュメントを読み込む代わりに)ダウンロードボックスを強制したい場合は、Content-Dispositionattachmentを使用する必要があります。

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

ブラウザーによっては、Content-Lengthを設定するか、Content-typeを、application/force-downloadapplication/octet-streamapplication/downloadの1つ以上の組み合わせ(複数のヘッダー)に変更する必要がある場合もあります。そして、私がコメントで書いたように、ヘッダーをキャッシュするとダウンロードが妨害される場合があります。送信されるキャッシングヘッダーを確認します。

55
Stefan Gehrig

表の後半で、ブラウザにファイルまたはメモリ内のデータを送信するための単純で再利用可能なコンポーネントとして このアクションヘルパー をお勧めします。

キャッシュ、廃棄のオプションがあり、Apache Sendfileを利用できます

6

私の推測では、あなたは次のようなことをしていると思います:

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

か何か。

ここでの応答はレンダリングされません(ヘッダーがレンダリングされます)。応答は通常、アクション後の印刷中にレンダリングされます。

ヘッダーを直接設定する(非ooコードで注記したように)か、$this->getResponse()->sendHeaders()を直接使用する必要があります。

2
Justin

ヘッダーセットがありました。設定されていませんが、追加されました。だから私はtext/htmlのcontent-Typeと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

0
Guntram