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

cakePHPのSSL設定+jQueryのError Loading Page

cakeで作ったアプリの認証画面でhttps環境だとError Loading Pageというエラーメッセージがでてしまい、ログインできないという事象が発生。 最初はSSLが原因かとおもっていたんです …

no image

dateTimeの使い方

phpの日付ライブラリであるdateTimeについて。 Contents1 過去のリンク2 頻出表現3 リンク 過去のリンク CakePHP3 日付ライブラリ(Time)について http://ski …

no image

フレームワークの基本的なアーキテクチャについて

フレームワークで大事なのは基本的な文法ではなく、構造の理解だと思います。 PHPですとCake,Laravel,Synfonyなどありますが、1つのものでしっかりと理解できていれば他のものもそれほど問 …

no image

ファイルポインタ関連の操作に関して

CSVの読み込みに関してファイルポインタ関連で色々と整理することがあったのでメモ。 Contents1 今回やりたかった処理2 ファイルポインタとは 今回やりたかった処理 CSVファイルを読み込み(文 …

no image

リクエストとレスポンスについて

Laravelでリクエストとレスポンスにはそれぞれ元からクラスが当てあられております。

上記のようなメソッドでリクエストパラメータ自体 …

アーカイブ