-
- // Excel ファイルのヘッダーを出力します。user.csv を必要なファイル名に置き換えることができます
- header('Content-Type: application/vnd.ms-excel');
- header ( 'Content-Disposition:attachment;filename="user.csv"');
- header('Cache-Control:max-age=0');
-
- // メモリを節約するために、データベースからデータを取得します。データは置かないでください メモリを一度に読み取り、ハンドルから 1 行ずつ読み取ります
- $sql = 'select * from tbl where...';
- $stmt = $db->query($sql);
-
- // PHP ファイルハンドルを開きます。php://output はブラウザに直接出力することを意味します
- $fp = fopen('php://output', 'a');
-
- // Excel の列名情報を出力します
- $head = array('名前' , '性別', '年齢', 'メール', '電話番号', '...');
- foreach ($head as $i => $v) {
- // Excel for CSV は GBK エンコードをサポートしています。Convert する必要があります。そうしないと文字化けします
- $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();
- flash();
- $cnt = 0;
- }
-
- foreach ($row as $i => $v ) {
- $row[$i] = iconv(' utf-8', 'gbk', $v);
- }
- fputcsv($fp, $row);
- }
コードをコピー
簡単使用してメモリを節約し、サードパーティのライブラリに依存しません。必要な友達は、自分で試してみてください。
|