ストリーム 関連のプロジェクトの話
by sasezaki#ストリーム 関連のプロジェクト
ここ最近psr-7を受けて、streamまわりのコンポーネントを作ったりしてたのでその整理
自分が手を加えたもの
SfpIteratorUrl
https://github.com/struggle-for-php/SfpIteratorUrl
- Iterator to stream に出力するのが目的
- PSR-7 is imminent, and here's my issues with it. にて指摘されてる、450MBのXML出力するにはの回答アプローチ
- streamWrapperを利用 ( stream_read() == Iterator::current() )
- 実装はまだ甘い。
- 全バッファを読むわけではないので、lowメモリー
- iteratorループ回し切ればlength取得可能なのでcontent-lengthもセット可能(出力時に2回まわすことになるので割と無駄)
sfp-diactoros-extension
https://github.com/struggle-for-php/sfp-diactoros-extension
- echoの代わりにfpassthru()したいってのが目的
- SfpIteratorUrlなどと組み合わせ利用を意図
SfpStreamView
https://github.com/struggle-for-php/SfpStreamView
- テンプレートエンジンがob_get_contents()にて、全バッファ取得してくるのメモリ食いすぎじゃね?ってのが動機。
ob_start(function($buffer) use (&$fp)
という感じでpsr-7Streamボディのファイルポインタの再利用- php://tempが必要なぐらいテンプレートレンダリング結果のHTMLサイズがデカいときに有用
StreamMacroX
https://github.com/sasezaki/StreamMacroX
テンプレートエンジンのコンパイルに時間がかかるなら、コンパイルしながらレスポンス返せばいいじゃないとStream_Macroをちょっといじって(ob_get_contents|ob_get_clean)なしにのもの出来そうなんだけど、PHPライセンスだったの気付いて頭抱えてる
— sasezaki (@sasezaki) October 19, 2014
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
- http://openpear.org/package/Stream_Macro からのフォーク
- オリジナルだとob_get_cleanしてたので手を加えた。
- streamWrapperとphp_user_filterのあわせ技
- マクロからphpタグに展開し、
include
でphpタグが評価される(たしか)
興味のあるもの
- https://github.com/salsify/jsonstreamingparser
- 多い日でも安心ですね
- https://github.com/prewk/xml-string-streamer
XMLReader
単体との違いはちゃんとまだ把握してないです
おしかったです
- https://github.com/crazycodr/php-stream-iterators
- これは、streamからiteratorを生成するのが目的らしい
上述のlowメモリー系とはたぶん向き先がちがってるもの
私が欲しかった実装はこのサンプルでは ご ざ い ま せ ん なもの
- https://github.com/phly/psr7examples
- なんで
getSize()
がcount($this->iterator)
なの?
- なんで
上記以外でテスト関連で、vfsとかphp-vcrとかありますがここで話題にしたいのとはまあ別
Created 7 years ago |
Updated 7 years ago