PHPプログラミング

最終更新日:
公開日:

レシピ

出力

データをCSVファイルとしてダウンロードする

取得したデータをCSVファイル形式でダウンロードする方法を解説します。

この記事のポイント

  • CSVファイルとして出力する内容を1つの変数に文字列(String)形式でまとめる
  • header関数で出力するファイル形式を指定する

目次

概要

次のような流れでCSVファイルを生成し、ダウンロードすることのできる形で作成します。

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ファイル

出力されたCSVファイルは、ExcelやNumbersなどの表計算ソフトで開いて閲覧、編集することが可能です。

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で開いたりするために文字コードを調整する必要があります。
文字コードの調整については別記事「はしご高などの旧字体漢字の文字化けを防ぐ」を確認してください。

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

コメントありがとうございます!
運営の参考にさせていただきます。