Excel読み込みできるCSVファイルをダウンロードする

phpCSVをダウンロードする場合、file put csv mb convert variables ダウンロード php 標準出力 stdout あたりのキーワードで検索して作ります。
でも毎回作るのもめんどいし、まとまって作ってあると便利なので作りました。

これで、 h_sakurai php csv でググればOKくらいになるはず。

<?php
downloadCSV("ほげ.csv",
	array(
		array("ほげテーブル"),
		array("名前\nName","年齢\nage"),
		array("hoge","20"),
		array("ほげ","30")
	)
);
/**
 * CSVファイルダウンロード
 *
 * エクセルで読み込み可能なCSVファイルをファイルをダウンロードする形で出力します。
 * 文字コードはUTF-8,EUCJP-WINからの変換になります。
 * @param string $filename ファイル名
 * @param array $table 2次元配列
 */
function downloadCSV($filename, $table) {
    // 文字コード変換
    mb_convert_variables("SJIS-WIN", "UTF-8,EUCJP-WIN,SJIS-WIN", $filename, $table);

    ob_start();// 標準出力のバッファリング開始
    // 標準出力オープン
    $fp = fopen('php://output', 'w');
    foreach($table as &$line) {
        // 1行分CSV出力
        fputcsv($fp, $line);
    }
    // ファイルクローズ
    fclose($fp);
    // 標準出力バッファの内容取り出し
    $csv = ob_get_contents();
    // 標準出力バッファリング終了
    ob_end_clean();

    // ファイルサイズ取得
    $file_length = strlen($csv);

    // ダウンロード用のヘッダ出力
    header("Content-Disposition: attachment; filename=$filename");
    header("Content-Length:$file_length");
    header("Content-Type: application/octet-stream");

    // CSVデータ出力
    echo $csv;
}
?>