Tech
Webシステムプログラマーによる、ちょっとためになる(かもしれない)情報共有ブログ
 

【第63回】PHPでCSVデータ出力

 
今日はPHPでCSVデータを出力するプログラムです。

データベースから結果を呼び出してCSV形式で出力したり、CSVファイル生成をす
るためにプログラムを作ることもあるかと思います。

まずは、ファイル名をつけてデータをCSV形式に書き出して保存する方法です。
<?php

// CSVファイル名の設定
$csv_file = "test.csv";

// CSVデータの初期化
$csv_data = "";

// CSVに書き出すデータ
$data[0] = array("月曜日","Monday");
$data[1] = array("火曜日", "Tuesday");
$data[2] = array("水曜日", "Wednesday");
$data[3] = array("木曜日", "Thursday");
$data[4] = array("金曜日", "Friday");
$data[5] = array("土曜日", "Saturday");
$data[6] = array("日曜日", "Sunday");

// CSVデータの作成
foreach($data as $key => $value ){

$csv_data .= $key. ",";
$csv_data .= $value[0]. ",";
$csv_data .= $value[1];

if(count($data) !== intval($key)+1){

$csv_data .= "\n";

}
}

// ファイルを追記モードで開く
$fp = fopen($csv_file, 'ab');

// ファイルを排他ロックする
flock($fp, LOCK_EX);

// ファイルの中身を空にする
ftruncate($fp, 0);

// データをファイルに書き込む
fwrite($fp, $csv_data);

// ファイルを閉じる
fclose($fp);

// 完了メッセージ
echo("Created CSV Data!");
?>

実行してみます。

Created CSV Data!が表示され、サーバー側にtest.csvが作成されています。

(test.csv)
0,月曜日,Monday
1,火曜日,Tuesday
2,水曜日,Wednesday
3,木曜日,Thursday
4,金曜日,Friday
5,土曜日,Saturday
6,日曜日,Sunday

基本的な流れは

1.CSVデータを作成する

2.ファイルを追記モードで開く

3.ファイルをロックする

4.ファイルの中身を空にする

5.データをファイルに書き込む

6.ファイルを閉じる

といった流れです。

サンプルはファイルの中身を空にしてからデータを入れていますが、
もし、CSVファイルの内容を追記したい場合は、

// ファイルの中身を空にする
ftruncate($fp, 0);

の部分は不要です。

次にサーバー下でCSVファイルの生成ではなく、CSVデータをそのままダウンロー
ドしたい場合があるかもしれません。

クライアント向けにCSVデータに提供する場合です。

次のサンプルを実行してみます。

<?php

// CSVファイル名の設定
$csv_file = "test.csv";

// CSVデータの初期化
$csv_data = "";

// CSVに書き出すデータ
$data[0] = array("月曜日","Monday");
$data[1] = array("火曜日", "Tuesday");
$data[2] = array("水曜日", "Wednesday");
$data[3] = array("木曜日", "Thursday");
$data[4] = array("金曜日", "Friday");
$data[5] = array("土曜日", "Saturday");
$data[6] = array("日曜日", "Sunday");

// CSVデータの作成
foreach($data as $key => $value ){

$csv_data .= $key. ",";
$csv_data .= $value[0]. ",";
$csv_data .= $value[1];

if(count($data) !== intval($key)+1){

$csv_data .= "\n";

}
}

// MIMEタイプの設定
header("Content-Type: application/octet-stream");

// ファイル名の表示
header("Content-Disposition: attachment; filename=$csv_file");

// データの出力
echo($csv_data);

?>

実行すると・・・

ダイアログが表示されます。

1.GIF

ファイル名をtest.csvのままで保存して・・・。

CSVファイルを開くと先ほどのCSVデータが表示されます。

最初のデータ作成部分は同じですが、その後はMIMEタイプをapplication/octet-
streamにして、ファイル名を設定して、あとはCSVデータを文字列を出力します。

サンプルはecho文を使っていますが、print文でも大丈夫です。

これでクライアント側でCSVファイルをダウンロードすることができました。

今日はこれでおしまいです。

トラックバック(0)

トラックバックURL: http://blog.promob.jp/mt/mt-tb.cgi/323

コメントする