【PHP】データをCSVファイルでダウンロードする方法
今回はPHPにて、データベースのデータをCSVファイルでダウンロードする方法を記載します。
データベースの準備
データベースに下記テーブルを作成します。
下記コマンドを実行します。
CREATE TABLE sample (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(128),
price VARCHAR(128),
date DATETIME NOT NULL
)ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;
下記コマンドでサンプルデータを3件登録します。
INSERT INTO sample (title, price, date) VALUES
('いちご', '100', now()),
('メロン', '200', now()),
('スイカ', '1000', now());
下記作成されます。
一覧画面にダウンロードリンクを表示する
一覧画面を作成し、ダウンロードリンクを表示させます。
list.phpを作成し、下記記載します。
<table>
<thead>
<tr>
<th>ID</th>
<th>タイトル</th>
<th>価格</th>
<th>日付</th>
</tr>
</thead>
<tbody>
<?php
foreach ($result as $row){
print "<tr>";
print "<td>".$row['id']."</td>";
print "<td>".$row['title']."</td>";
print "<td>".$row['price']."</td>";
print "<td>".$row['date']."</td>";
print "</tr>";
}
?>
</tbody>
</table>
<a href="csv.php">csvダウンロード<a>
下記のように表示されます。
ダウンロード実装ファイルの作成
次に、csvダウンロードリンクをクリックしたときの実装ファイルを作成します。
csv.phpを作成し、下記記載します。
<?php
$today = date("YmdHis");
// 出力情報の設定
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=".$today.".csv");
header("Content-Transfer-Encoding: binary");
//DB接続
$user = 'test';//データベースユーザ名
$password = 'test1234';//データベースパスワード
$dbName = "sample";//データベース名
$host = "sp_db_1";//ホスト
try {
// MySQLへの接続
$dsn = "mysql:host={$host};dbname={$dbName};charser=utf8";
$pdo = new PDO($dsn, $user, $password);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT * from sample";
$stm = $pdo->prepare($sql);
$stm->execute();
$result = $stm->fetchAll(PDO::FETCH_ASSOC);
// 接続を閉じる
$stm = null;
} catch (PDOException $e) { // PDOExceptionをキャッチする
print $e->getMessage() . "<br/gt;";
die();
}
// 1行目を作成
$row = '"ID","タイトル","価格","日付"' . "\n";
foreach ($result as $value ){
$row .= '"' . $value['id'] . '","' . $value['title'] . '","' . $value['price'] . '","' . $value['date'] . '"' . "\n";
}
print $row;
return;
?>
これで、list.phpの「csvダウンロード」をクリックするとcsvファイルがダウンロードできるようになります。
GitHubリポジトリ
今回作成したソースはGithubにて公開しています。下記リンクよりご確認ください。(L7ブランチです。)
読んでいただきありがとうございます。