2011-03-07 33 views
6

symfonyでwkhtmltopdfを介してPDFファイルを生成してブラウザに出力する単純なアクションを作成しました。symfony:setHttpHeader()は動作しませんheader()は

は、ここでは、コードです:

$response = $this->getResponse(); 
    $response->setContentType('application/pdf'); 
    $response->setHttpHeader('Content-Disposition', "attachment; filename=filename.pdf"); 
    $response->setHttpHeader('Content-Length', filesize($file)); 
    $response->sendHttpHeaders(); 
    $response->setContent(file_get_contents($file)); 
    return sfView::NONE; 

私のローカル開発環境で正常に動作します - 私のブラウザは、ダウンロード・ダイアログを示し、予想通りヘッダを取得します。

私は、PHP 2. 5.9-10 + lenny9をPHP 5.3.5-0.dotdeb.0で実行して、テスト環境を更新しました。 私はURLは今、テスト環境のために、私のブラウザは任意のカスタム設定のヘッダーを取得しないことを呼び出す場合:予想通り、私は自分の行動のヘッダ()を介して手動で設定する場合

Date Mon, 07 Mar 2011 10:34:37 GMT 
Server Apache 
Keep-Alive timeout=15, max=100 
Connection Keep-Alive 
Transfer-Encoding chunked 

は、Firebugのはヘッダを示し。 誰かが間違っている可能性があることを知っていますか? symfonyのバグですか?phpまたはapache2の設定に問題がありますか?理解できません。 -/

ありがとうございます!

+0

@teonanacatl ...あなたのアカウントのいずれかを選択し、それを使用する現在、あなたは明確に2つの異なるアカウントを使用しています。http:。。/ /stackoverflow.com/users/647993/teonanacatlおよびhttp://stackoverflow.com/users/480353/teonanacatl –

答えて

10

あなたの問題はここにある:

return sfView::NONE; 

変更し、これに:余分なコメントが原因

return sfView::HEADERS_ONLY; 

編集更新。

あなたはpdfをダウンロードしようとしているので、問題に誤って近づいています。 sendContent()は使用しないでください。 (これは私が書いた、すべての主要なブラウザ間で動作するように証明されてい生産現場からの抜粋です)以下を参照してください:

$file = '/path/to/file.pdf'; 
$this->getResponse()->clearHttpHeaders(); 
$this->getResponse()->setStatusCode(200); 
$this->getResponse()->setContentType('application/pdf'); 
$this->getResponse()->setHttpHeader('Pragma', 'public'); //optional cache header 
$this->getResponse()->setHttpHeader('Expires', 0); //optional cache header 
$this->getResponse()->setHttpHeader('Content-Disposition', "attachment; filename=myfile.pdf"); 
$this->getResponse()->setHttpHeader('Content-Transfer-Encoding', 'binary'); 
$this->getResponse()->setHttpHeader('Content-Length', filesize($file)); 

return $this->renderText(file_get_contents($file)); 
+1

HEADER_ONLYではなくHEADERS_ONLY –

+0

これは、$ this-> getResponse() - > sendHttpHeadersを追加せずに私にとってはうまくいかないでしょう); – Jestep

0

私が持っている唯一の違いは次のとおりです。

$response = $this->getContext()->getResponse(); 
$response->clearHttpHeaders(); 
0

は同じ問題を抱えて。ただ、ファイル名を二重引用符( ")を追加

$this->getResponse()->setHttpHeader('Content-Disposition', 'attachment; filename="'.$filename.'"'); 

または

header('Content-Disposition: attachment; filename="'.$filename.'"'); 
関連する問題