転載: http://blog.csdn.net/huyanping/article/details/7068356
データベースから Excel ファイルにデータをエクスポートする必要がある場合は、PHPExcel などのオープン ソース ライブラリを使用する方が確かに簡単ですが、大量のデータのサポートが非常に不十分であり、簡単にエクスポートできません。 PHP のメモリ使用量の上限に達しました。 fputcsvを使ってCSVファイルを書き込み、ブラウザに直接Excelファイルを出力する方法です。
// Excel ファイルのヘッダーを出力します。user.csv を任意のファイル名に置き換えることができます
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition:attachment; filename ="user.csv"');
header('Cache-Control: max-age=0');
// メモリを節約するために、データをメモリに読み込まないでください。一度、ハンドルから 一行ずつ読むだけです
$sql = 'select * from tbl where...';
$stmt = $db->query($sql);
// PHPファイルハンドルphpを開きます://outputは直接出力という意味です ブラウザに移動します
$fp = fopen('php://output', 'a');
// Excelの列名情報を出力します
$head = array('Name', 'Gender ', '年齢', 'メール ', '電話番号', '...');
foreach ($head as $i => $v) {
// CSV Excel は GBK エンコードをサポートしているため、必ず変換してください。それ以外の場合は文字化けします
$head[$i] = iconv('utf-8', 'gbk', $v);
}
// fputcsv経由でファイルハンドルにデータを書き込みます
fputcsv($fp, $head);
// Counter
$cnt = 0;
// $limit 行ごとに出力バッファをリフレッシュします。大きすぎず、小さすぎないようにします
$limit = 100000;
// メモリを無駄にせずに 1 行ずつデータを取り出します
while ( $row = $stmt-> fetch(Zend_Db::FETCH_NUM)) {
$cnt ++;
if ($limit == $cnt) { //データ量が多すぎることによる問題を防ぐために出力バッファをリフレッシュします
ob_flush ();
flush();
$cnt = 0;
}
foreach ($row as $i => $v) {
$row[$i] = iconv('utf-8', 'gbk' , $v);
}
fputcsv($fp, $row);
}
上記は、PHP での CSV ファイルのエクスポートを内容も含めて紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。