skillup

技術ブログ

PHP

streamについて

投稿日:

CSVダウンロード機能などを実装していて、動くコードはかけていますが、内容をよく理解していないことも多かったです。

今回はストリームについて。

ストリームとは

主にデータの総量がわからないケースでよく使われるデータの提供方法になります。

上記もストリーム処理ですね。

ポインタを設定し、これをループの中で、回すことでデータを取得しています。

参考リンク

【PHP】ストリームってなに?

PHPのstream wrapperをさわってみた

ファイル書き込みの場合にはストリームの対象が data.txt などになりますが、CSVダウンロードなどの場合には実体のあるデータに書き込みをするわけではありません。

この場合、PHP自身が用意しているメモリやテンポラリファイルのような場所に一時的にファイルをためておき、そこからデータをダウンロードするようにします。

具体的には php://memory、php://temp のようなものが該当します。

CSVダウンロード機能の実装として、上記のような処理がある場合、

この部分で、ストリームを使ってデータを格納しています。(rewindはファイルポインタの位置を先頭にということなので、fopenのfcloseに相当するものと思われます。)

は実際にストリームからデータを取得します。

CSV出力ではデータが増えた時に、メモリやCPU効率など考える場所が複数あります。

色々見ていくと、ストリームを使ってブラウザに直接データを返すのが安全かもしれませんね。

参考リンク

PHPでCSVを生成する (ただしメモリ・CPUを抑えて)

-PHP
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

CakePHP3 日付ライブラリ(Time)について

CakePHPには標準でいろいろなライブラリが入っていますが、日付ではCake\I18n\Timeというライブラリが入っています。 内部では3.2より前のバージョンではCarbonだったようですが、そ …

no image

form以外でのPOST送信(というかHTTP通信全般)

前回の記事に引き続きですが、APIを叩く側はformでデータを送るのではなく、コードの中にPOSTする処理を書きます。 選択肢としては curlコマンドを使う file_get_contentsを使う …

no image

POP3を使ったメール受信

メールの送信と比べると、プログラムで描く頻度は少ないですが、メールの受信について。 Contents1 POP3サーバー2 プログラムにてPOP3サーバーと通信3 PHPにてメールを取得する場合 PO …

no image

ob_startを使ったバッファリング出力

先日var_dumpの結果をログに出力したいときに検索すると下記のようなコードを書けばよいということがわかりました。

ob_start …

no image

phpの時分秒+cakePHPのupdate

ちょっと小ネタ集になります。 Contents1 PHPで秒→時分秒変換2 cakePHPでのupdate PHPで秒→時分秒変換 PHPで秒数から時分秒に変換するプログラムです。 汎用的かなと思った …

アーカイブ