3

サーバー上で生成した.CSVファイルをダウンロードするためのリンクがWebページにあります。ダウンロードのコードは次のとおりです。

//open/save dialog box
header('Content-Disposition: attachment; filename="inventoryData.csv"');
//content type
header('Content-type: application/excel');
//read from server and write to buffer
readfile('spreadsheet/inventory.csv');

サーバーでファイルを開くと、問題なく表示されます。ただし、ダイアログボックスからファイルをダウンロードすると、WebページのHTMLコードが.csvファイルの先頭に追加されます。

なぜそれが起こるのか、何か考えはありますか?

4

3 に答える 3

4

このコードがZFを使用しているためと思われるコントローラーアクションに含まれている場合は、ビューをレンダリングしようとするため、レイアウトとビューレンダラーを無効にする必要があります。

試す:

public function downloadAction()
{
    $this->_helper->layout()->disableLayout();
    $this->_helper->viewRenderer->setNoRender(true);

    //...

    //open/save dialog box
    header('Content-Disposition: attachment; filename="inventoryData.csv"');
    //content type
    header('Content-type: application/excel');
    //read from server and write to buffer
    readfile('spreadsheet/inventory.csv');
}

$this->_helper->layout()->disableLayout();レイアウトスクリプトがレンダリングされないようにし(レイアウトを使用していると仮定)、$this->_helper->viewRenderer->setNoRender(true);HTMLまたは空白を含む可能性のあるコントローラーアクションのビュースクリプトをレンダリングしないようにビューレンダラーに指示します。

于 2012-06-08T17:12:12.667 に答える
-3

これはトリックを行う必要があります

  header("Pragma: public");
  header("Expires: 0");
  header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  header("Cache-Control: private",false);
  header("Content-Type: application/octet-stream");
  header("Content-Disposition: attachment; filename=\"inventoryData.csv\";" );
  header("Content-Transfer-Encoding: binary");
于 2012-06-08T09:29:46.880 に答える
-4

これを試してください:

header("Content-type: application/octet-stream");
header("Content-disposition:attachment; filename=inventoryData.csv");
于 2012-06-08T09:24:43.637 に答える