データベースから .csv にデータをエクスポートしてみます。エクスポート リンクをクリックしても、大量のデータがある場合、ブラウザに保存ウィンドウが長時間表示されません。スクリプトがしばらくハングしているように見え、かなり時間がたつとブラウザに保存ウィンドウが表示されると、非常に混乱する可能性があります。コードはコントローラーで次のようなものです。
$this->_helper->layout->disableLayout();
$this->_helper->viewRenderer->setNoRender();
$fileName = $list->list_name . '.csv';
$this->getResponse()->setHeader('Content-Type', 'text/csv; charset=utf-8')
->setHeader('Content-Disposition', 'attachment; filename="'. $fileName . '"');
$contacts = new Contact();
$contacts->export($listId);
Export メソッドはレコードを 1 つずつ読み取り、次のように出力します。
$fp = fopen('php://output', 'w');
foreach ($mongodbCursor as $subscriber) {
$row = formRow($subscriber);
fputcsv($fp, $row);
}
一部のアプリケーションでは、保存ウィンドウがすぐに表示され、保存をクリックするとダウンロードの進行状況が表示されます。
私は置き換えようとしました:
$this->getResponse()->setHeader('Content-Type', 'text/csv; charset=utf-8')
->setHeader('Content-Disposition', 'attachment; filename="'. $fileName . '"');
これで:
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename="'. $fileName . '"');
これまでのところ役に立ちませんでした。データベースからすべてのデータを 1 つずつ読み取る前にヘッダーを送信することは可能でしょうか? ご協力ありがとうございます。