Webエンジニア 新人日記

Webエンジニアになりました。元々はCOBOLやらBASICやらでプログラムしてました。C言語やVisualBasicは趣味でやっていましたが、久々に現場復帰ということです。資格はエンベデッドスペシャリスト、DBスペシャリスト、ネットワークスペシャリスト、セキュリティスペシャリスト、システムアーキテクト、プロジェクトマネージャ他を所有

【PHP】CSVを出力する

DB上のデータをExcelに吐き出したいような場合。
Excel側にODBCドライバを組み込み読みこむようにすることもできるけど、諸事情によりできないような場合。

CSVで吐き出し、Excelにコピペをしてもらうことにしよう。


まずは配列の作成。

$csvarray = array($space, $yobiclass, $space, $studentname, $studentkana, $space, 
	$schoolname, $telno, $space, $zipcode, $address.$address2, $space, $space, $paydate, $space, $space, "1");

次に、メモリ上のテンポラリ領域に作成。自動的に一時ファイルは削除させる。fputcsvは、データ区切りを自動的に付与する。

//メモリ上のテンポラリ領域に出力
$fp = fopen('php://temp', 'r+b');
fputcsv($fp, $csvarray);

データをダウンロードさせるためのheader出力

header('Content-Type: text/csv');
header("Content-Disposition: attachment; filename=" . $studentname . ".csv");

一時ファイルから読み込み、文字コードを変換しながら書き込む。SJISでなくてSJIS-win。
ExcelUTF-8を読み込むと文字化けしてしまうので。

//ファイルポインタを先頭へ
rewind($fp);
//リソースを読み込み文字列取得
$csv = stream_get_contents($fp);

//CSVをエクセルで開くことを想定して文字コードをSJIS-winSJISへ
$csv = mb_convert_encoding($csv,'SJIS-win','utf8');

print $csv;

fclose($fp);