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

Angularでのイベント+改行+echoでのバッファサイズ変更

Contents1 Angularのイベント処理2 Angularでの改行ネタ3 echoでのバッファサイズ変換 Angularのイベント処理 Angularを使っていて楽なのはHTMLタグにインベン …

no image

CakePHP3 リクエストパラメーターの扱いについて

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

no image

PHPの配列操作

ながらく放置してました・・・ PHPを久々にやったんですが、やっぱり配列の関数・ライブラリが充実している分、作業がサクサクすすみますね。配列の操作でいろいろと学ぶところがあったんで掲載します。 Con …

no image

cakePHP Tips その2

またまたCakePHPのネタです。 タイトルから内容がわからなくてすいません。 五月雨式に行きます。 Contents1 コントローラーごとのベースになるテンプレートの変更2 linkタグでのHTML …

no image

phpQueryを使ったスクレイピングに関して

以前、スクレイピングに関してはこのエントリーでも紹介したとおり、phpに標準で入っているDOMDocumentを使う方法が一番楽です。 ところがデータによってはXMLで解析するため目的とする要素を取得 …