Tips

【PHP】CSV出力のサンプルコード【CakePHP】

【PHP】CSV出力のサンプルコード【CakePHP】

研修にてCakePHPでCSV出力の実装をやりましたのでサンプルコードを記載します。
どんな感じで出力できるのかさくっと確認したい人向けかと思います。

環境

PHPのバージョン…5.6.35
CakePHPのバージョン…3.6.3

流れをざっくり

基本的には以下のような流れとなります。
①ファイル作成し開く
②ファイルに内容を書き込む
③ファイルを閉じる

サンプルコード

▼view(search.ctp)

1
2
3
<a href="<?= $this->Url->build('/sales/export') ?>" class="btn btn-success">
        <span class="glyphicon glyphicon-download" aria-hidden="true">CSV出力</span>
</a>

▼controller(SalesController.php)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// CSV出力
public function export(){
 
    // 出力する値の設定
    $sales = array(
        array(1, "ラザニア", 500)
        , array(2, "生姜焼き", 450)
        , array(3, "かつおのお刺身", 350)
    );
 
    // 保存場所とファイルの設定
    $file = '/var/www/html/cake3/webroot/csv/' . date('YmdHis') . '.csv';
 
    // ファイルを書き込み用で開く
    $f = fopen($file, 'w');
 
    // 正常にファイルを開けていれば書き込む
    if($f){
 
        // ヘッダーの出力
        $header = array("NO.", "商品名", "値段");
        fputcsv($f, $header);
 
        // データの出力
        foreach($sales as $sale){
 
            // 出力するデータを整形
            $data = array(
                $sale[0]    // NO.
                , $sale[1]  // 商品名
                , $sale[2]  // 値段
            );
 
            // ファイルに書き込み
            fputcsv($f, $data);
 
        }
 
        // ファイルを閉じる
        fclose($f);
 
        // 成功メッセージ
        $this->Flash->success(__('CSV outputted.'));
 
    }else{
 
        // 失敗メッセージ
        $this->Flash->error(__('CSV output failure.'));
 
    }
 
    // 検索結果画面に遷移
    return $this->redirect(['action' => 'search']);
 
}

▼できたファイルがこちら

「cakephp3 csv出力」で調べると、CsvViewがなんたら、CSVヘルパーがなんたら、とでてきますが
そんなに特別な記述をしないでも実装することができました。

ポイントは以下の関数です。

  • fopen
  • fputcsv()
  • fclose

上記の関数を駆使すれば、CakeじゃなくてピュアなPHPでも記述はできそうですね。

ピュアなPHPでCSV出力はどうやるのか、今度書きます!

WEBアプリケーション関連 人気連載リンク

基礎からPHPWEBアプリ解発を学ぶなら・・
PHP基礎 連載

より実践的なWEBアプリ開発講座!Bootstrap活用を学ぶなら・・
魁!小野の塾 連載

Recent News

Recent Tips

Tag Search