PHP で CSV ファイルをダウンロードさせる

サーバー上の CSV ファイルをダウンロードさせたり、配列や MySQL の データを直接 CSVファイルとしてダウンロードさせたりします。

[adsense1]

サーバー上の CSV ファイルをダウンロードさせる

下のコードでは、HTTP ヘッダーを出力していますが、これでファイルダウンロードのダイアログボックスが表示されるようになります。
PHP ファイルと同じ階層に prefs.csv があるものとします。

デモとして、以下の URL をクリックすると、都道府県の県庁所在地一覧の CSV ファイルをダウンロードできます。
http://monolio.com/dev/csv/download1.php

<?php
$fileName = "prefs.csv";
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $fileName);
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($fileName));
readfile($fileName);

配列を CSV ファイルとして直接ダウンロードさせる

下のコードの最後の3行が重要になります。
HTTP ヘッダーを出力していますが、これでファイルダウンロードのダイアログボックスが表示されるようになります。
指定したファイル名で、その中身は echo で出力したやつになります。

文字化けするので、mb_convert_encoding で文字コードを変換しています。

ここでは配列を例にあげていますが、もちろん MySQL のデータなどを出力することもできます。

デモとして、以下の URL をクリックすると、都道府県の県庁所在地一覧の CSV ファイルをダウンロードできます。
http://monolio.com/dev/csv/download2.php

<?php
$prefs = array(
    array('01', '北海道', '札幌市'),
    array('02', '青森県', '青森市'),
    array('03', '岩手県', '盛岡市')
);

// CSVデータ作成
foreach ($prefs as $key => $pref){
    for ($i = 0; $i < count($prefs[$key]); $i++) {
        $csv .= mb_convert_encoding($pref[$i], 'SJIS-win', 'UTF-8');
        if ($i < count($prefs[$key])-1) $csv .= ",";
    }
    $csv .= "¥r¥n";
}

// 出力
$fileName = "pref_" . date("YmdHis") . ".csv";
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $fileName);
echo $csv;

[adsense2]

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください