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での複数データベース接続

cakePHP3で複数のデータベースに接続することができます。 まず設定ファイルで複数のデータベースを定義します。(defaultはそのままにしておきます。) [crayon-600f509d4fa1 …

no image

PHPでのPDF出力 テーブル

PDFで何かを出力する場合、ほとんどが納品書や請求書などの帳票でしょう。 これらもfpdfで出力することができます。 Contents1 ソース2 参考リンク ソース [crayon-600f509d …

no image

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

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

ob_start …

no image

phpdocument

今回はphpのdocument生成ツールについて。 Contents1 phpdocument1.1 インストール1.2 使い方1.3 参考リンク phpdocument https://www.ph …

no image

php5.6のインストール+cake3でのbake

cake3を動かしたい場合、PHP5.4以上でないと動きません。 2016年1月現在、CentOS6でyumでPHPをインストールする場合、php5.3ですので、5.4以上を入れる場合、別のリポジトリ …