今日は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);
?>
実行すると・・・
ダイアログが表示されます。
ファイル名をtest.csvのままで保存して・・・。
CSVファイルを開くと先ほどのCSVデータが表示されます。
最初のデータ作成部分は同じですが、その後はMIMEタイプをapplication/octet-
streamにして、ファイル名を設定して、あとはCSVデータを文字列を出力します。
サンプルはecho文を使っていますが、print文でも大丈夫です。
これでクライアント側でCSVファイルをダウンロードすることができました。
今日はこれでおしまいです。














コメントする