0

私は symfony 1.4 のプロジェクトを持っています。アクションで mysql テーブルを .csv ファイルにエクスポートし、次にサーバーからダウンロードします。ローカル開発に Wampserver を使用していますが、すべて正常に動作していますが、本番サーバーで、データをエクスポートしようとすると、保存するか開くかを尋ねることなく、.csv ファイルがブラウザーで自動的に開かれます。.csv を作成した後に使用するコードは次のとおりです。

$this->setLayout(false);
sfConfig::set('sf_web_debug', false);
$this->getResponse()->setHttpHeader('Content-Type', 'text/csv');
$this->getResponse()->setHttpHeader('Content-Disposition', 'attachment; filename="file.csv"');
$this->getResponse()->setHttpHeader('Pragma', 'no-cache');
$this->getResponse()->setHttpHeader('Expires', '0');
readfile(sfConfig::get('sf_upload_dir') . "/export/file.csv");
return sfView::NONE;

繰り返しますが、私のローカルサーバーではこれで問題ありません。ブラウザーは開くか保存するかのオプションを提供してくれます。これはコードの問題ですか、サーバーの設定ですか?

ファイルは utf-8 エンコードで保存されますが、これは問題ですか??

ありがとう

4

2 に答える 2

0

コメントのおかげで、私はそれを機能させることができました、私がしたことは@ j0kが提案したようにコンテンツタイプを変更し、readfile関数を使用する代わりにファイルにリダイレクトすることでした

$this->getResponse()->setHttpHeader('Content-Type', 'application/csv');
$this->redirect('/uploads/export/file.csv');

今それは働いています

ありがとう

于 2012-09-27T15:04:49.423 に答える
0

リダイレクトせずにそれを行う別の方法は次のとおりです。

  $this->getResponse()->clearHttpHeaders();
  $this->getResponse()->setHttpHeader('Content-Description','File Transfer');
  $this->getResponse()->setHttpHeader('Content-Type', 'application/csv');
  $this->getResponse()->setHttpHeader('Content-Disposition','attachment;filename='.$file_name); 
  $this->getResponse()->setHttpHeader('Pragma', '');
  $this->getResponse()->setHttpHeader('Cache-Control', '');
  $this->getResponse()->sendHttpHeaders(); 
  $this->renderText($fwrite('php://output',$stuff));

ファイルを保存する場所、またはファイルを 'php://output' に書き込む場所。

于 2012-10-02T13:07:46.440 に答える