最終更新日:
公開日:
レシピ
出力
データをCSVファイルとしてダウンロードする
取得したデータをCSVファイル形式でダウンロードする方法を解説します。
この記事のポイント
- CSVファイルとして出力する内容を1つの変数に文字列(String)形式でまとめる
- header関数で出力するファイル形式を指定する
目次
概要
次のような流れでCSVファイルを生成し、ダウンロードすることのできる形で作成します。
(1)の「Download」リンクが設定されたページと、(2)のCSVファイルを生成するPHPは別ファイルとして作成します。
今回は仮に、(1)のHTMLページを「index.html」、(2)のPHPを「csv.php」としましょう。
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSV Download</title>
</head>
<body>
<h1>CSV Download</h1>
<p><a href="csv.php">Download</a></p>
</body>
</html>
csv.php
<?php
// 出力情報の設定
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=GRAYCODE.csv");
header("Content-Transfer-Encoding: binary");
// 変数の初期化
$member = array();
$csv = null;
// 出力したいデータのサンプル
$member = array(
array(
'id' => 1,
'name' => '山田太郎',
'furigana' => 'やまだたろう',
'email' => 'taroyamada@sample.com'
),
array(
'id' => 3,
'name' => '加藤明美',
'furigana' => 'かとうあけみ',
'email' => 'akemikato@sample.com'
),
array(
'id' => 5,
'name' => '佐藤健夫',
'furigana' => 'さとうたけお',
'email' => 'takeosato@sample.com'
)
);
// 1行目のラベルを作成
$csv = '"ID","氏名","ふりがな","メールアドレス"' . "\n";
// 出力データ生成
foreach( $member as $value ) {
$csv .= '"' . $value['id'] . '","' . $value['name'] . '", "' . $value['furigana'] . '","' . $value['email'] . '"' . "\n";
}
// CSVファイル出力
echo $csv;
return;
出力されたCSVファイルは、ExcelやNumbersなどの表計算ソフトで開いて閲覧、編集することが可能です。
コードの解説
「// 出力情報の設定」の3行のheader関数では、PHPの出力形式を指定しています。
ここでCSVファイルとして出力するための指定を行なっているので、「csv.php」は通常のブラウザで閲覧できるページとしては出力されません。
2行目のheader関数の中に「filename=GRAYCODE.csv」と記述がありますが、ここで出力するファイル名を指定することができます。
例えば、ファイル名を日本語で「商品リスト.csv」としたい場合は「filename=商品リスト.csv」となります。
出力するデータを取得
今回は「// 出力したいデータのサンプル」の箇所で適当な出力データを作成していますが、実際はデータベースからデータを取得するコードが入ります。
項目ラベルを作成
「// 1行目のラベルを作成」の箇所では、出力データの項目名を設定しています。
CSVファイルの使用ケースによっては不要な場合もあります。
変数$csvには出力したい内容が全て入ります。
出力データを生成
「// 出力データ生成」が、肝心な出力内容を設定している箇所です。
今回は3名分のデータが入るだけなので、3回ループが実行される処理になります。
CSVのデータはそれぞれ「"(ダブルクォーテーション)」で囲い、「,(半角コンマ)」でデータを区切ります。
次の行へ進みたい場合は通常のテキストと同様に改行を入れます。
改行コード「\n」を行末に入れてあげましょう。
改行コードは「'(シングルクォーテーション)」で囲むとプレーンテキストになってしまうため、必ず「"」で囲ってあげる必要があることに注意してください。
出力する
最後から2行目の「echo $csv;」部分でファイル出力を実行し、「return;」で処理を終了します。
今回は最低限CSVファイルを出力するのに必要なコードのみを紹介していますが、実際にはWindowsのExcelで開いたりするために文字コードを調整する必要があります。
文字コードの調整については別記事「はしご高などの旧字体漢字の文字化けを防ぐ」を確認してください。