勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PHPで配列データをCSVとしてダウンロードさせる方法

   2024/04/17  PHP

PHPでログ的なデータをCSV化したかった。ただ、複数の人間が使うのでCSVファイルを都度生成していくと容量が圧迫されそう。また、権限の問題でAさんは全てCSV化できるけど、Bさんは制限付のものしかCSV化できないというケースで、ファイルを生成してしまうとURLを直で叩かれた場合にどうなるのか怖かった。

探してみると配列をCSVとしてダウンロードさせる方法があった。

 

ソースコード

<?

/*
権限チェック等の処理を入れる
アウトの場合はexit();とかで終わらせる。
*/


$csvDate = ''; //CSVデータ用

$csvDate .= 'コード,名前,得点
';//1行目はタイトルとか入れる。あと文末に改行入れる。\nとかでも良いと思う。


foreach( $array as $key => $val ){
/*
この辺で適当にCSVデータを突っ込んでいく。カンマ区切りと文末改行必要。
*/
}


mb_convert_variables('SJIS', 'UTF-8', $csvDate);
$fileName = "hoge_" . date("YmdHis") . ".csv";
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . $fileName);
echo $csvDate; //出力

例えば上記を記述したcsv.phpというファイルを作成し、他のページからリンクを貼るとCSVをダウンロードしてくれる。

CSVファイル自体は生成されないので、容量とかは問題なし。

クエリをつけたり、cookieとかで権限情報を保持している場合はソース上部のところで処理する。

ただ単にCSVファイルを生成するだけなら以下の過去記事参照。

https://taitan916.info/blog/archives/205

 - PHP

  関連記事

PHPで改行を含むデータをCSV化する際に表示崩れを防ぐ方法

PHPで改行を含むデータをCSV化した場合、そのCSVファイルをエクセル等で開く ...

PHPでCSVファイル出力用の関数

ここのところログ系をCSVファイル出力にするケースが多かった為、使いまわせるよう ...

PHPでCSVを簡単に取り扱える「LeagueCSV(thephpleague / csv)」の利用方法

PHPでCSVファイルの書き込みや読み込みを行う際、バニラPHPで対応していたが ...

PHPからCSVファイルを出力する際にメモリを節約する方法

MySQLよりデータを大量に取り出してCSVファイル化し、ダウンロードさせるとい ...

フォームからCSVファイルをアップロードしてPHPの配列に格納する方法

formからcsvファイルをアップロードさせて、PHPで色々処理したかった。とり ...