メモ
function exportCsv($fileName, $data, $header = null) { // headerがあれば先頭行に追加 if(!is_null($header)) array_unshift($data, $header); // tmpファイルストリームをオープン $fp = tmpfile(); // データの書き込み foreach($data as $v) fputcsv($fp, $v, ',', '"'); // ファイルポインタを先頭へ移動 rewind($fp); // ストリームを文字列に読み込む $csv = stream_get_contents($fp); // 文字コードをSJISにコンバート(excelで開いた際の文字化け対策) $csv = mb_convert_encoding($csv, 'SJIS', mb_internal_encoding()); // ファイルポインタを閉じる fclose($fp); // 指定したファイル名の拡張子やパスを取り除く $fileName = basename($fileName); // ダウンロード用のヘッダーを出力 header('Content-Disposition:attachment; filename="'.$fileName.'.csv"'); header('Content-Type:application/octet-stream'); header('Content-Length:'.strlen($csv)); echo $csv; die(); }
$fileName:保存したいファイル名を指定
$data:CSVファイルに書き込みたいデータを連想配列で指定
$header:先頭行に配置するデータを配列で指定(1行分)
以下渡すデータの例。
// ヘッダー(先頭行) $header = array( 'name_1', 'name_2', 'name_3', 'name_4', 'name_5', ); // データ部分(基本foreachで回す) $data[] = array( 'col_data_1', 'col_data_2', 'col_data_3', 'col_data_4', 'col_data_5' ); $data[] = array( 'col_data_1', 'col_data_2', 'col_data_3', 'col_data_4', 'col_data_5' );