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 リクエストパラメーターの扱いについて

CakePHPのリクエストの扱いについて。 ほとんどのフレームワークですと、HTTPリクエストの扱いに関してはフレームワーク側で実装されていることが多いので、フレームワークを使い始める場合、この部分に …

no image

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

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

no image

PHPメモリ測定

プログラムのメモリ測定に関して。今回はWordPressの処理に関してです。 まずはソースから。 処理を入れているファイルはルートディレクトリ直下のindex.phpです。 [crayon-5da42 …

no image

ロケール情報について

本日、csvファイルを読み込む処理を行っていたんですが、コンソールからコマンドを打つと化けずに、ウェブ上で見ると化けるという現象が発生。 csv,プログラムともに文字コードがutf8で統一していること …

no image

mb_convert_encodingに関して(文字コードの自動検出やその周辺)

以前Perlでもやりましたが、文字コードの自動検出に関して。 ちなみにcp932=SJIS-WINです。 参考リンク Perlでの動的改行コード読み込みに関して+cp932ネタ PHPの場合、mb_d …