ラベル csv の投稿を表示しています。 すべての投稿を表示
ラベル csv の投稿を表示しています。 すべての投稿を表示

2010年12月27日月曜日

PHPで CSVをダウンロードするための参考サイトとサンプルコード

CSVをダウンロードするWebアプリをPHPで実装する方法。
しばしば必要になるが、そのたびに調べ直してるので、後日のためにまとめてみる。



まとめるとこんな感じか。
$fileName = 'ダウンロードして保存する時のファイル名.csv';
$fileName =  mb_convert_encoding($fileName, 'SJIS-WIN');

header('Content-Type: application/x-csv');
header("Content-Disposition: attachment; filename=$fileName");

$fp = fopen('php://output', 'w');

$rows = /* 配列の集合(DBから取得したデータとか) */

foreach ($rows as $row) {
    mb_convert_variables('SJIS-WIN', mb_internal_encoding(), $row);
    fputcsv($fp, $row);
}

fclose($fp);

2009年3月27日金曜日

PHPの fputcsv()で CSVを出力する

(2011/1/17 追記:まとめ的なものも書いた → floatingdays: PHPで CSVをダウンロードするための参考サイトとサンプルコード


PHPでCSVを出力するなら、fputcsv()が便利。

$fp = fopen('test.csv', 'w');
fputcsv($fp, array(123, 'abc', '"quoted"', ',,,', 'あああ'));
fclose($fp);



123,abc,"""quoted""",",,,",あああ

ポイント
  • 必要に応じてダブルクォートで囲ってくれる
  • データにダブルクォートを含む場合、ダブルクォートを2重にしてエスケープしてくれる


デフォルトではカンマ区切りになるが、第3引数で区切り文字を指定できる。

タブ区切り(TSV)にする場合の例
$fp = fopen('test.csv', 'w');
fputcsv($fp, array(123, 'abc', '"quoted"', ',,,', 'あああ'), "\t");
fclose($fp);


難点は文字コードの指定ができないこと。
CSVをExcelで普通に開く場合、マルチバイト文字がShift_JISでないと文字化けしてしまう。
事前にSJISに変換しておくしかないのか。



ブログ アーカイブ

tags