ストリーム 関連のプロジェクトの話

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
  • http://openpear.org/package/Stream_Macro からのフォーク
  • オリジナルだとob_get_cleanしてたので手を加えた。
  • streamWrapperとphp_user_filterのあわせ技
  • マクロからphpタグに展開し、includeでphpタグが評価される(たしか)

興味のあるもの

おしかったです

上述のlowメモリー系とはたぶん向き先がちがってるもの

私が欲しかった実装はこのサンプルでは ご ざ い ま せ ん なもの


上記以外でテスト関連で、vfsとかphp-vcrとかありますがここで話題にしたいのとはまあ別

Created 1 year ago | Updated 1 year ago

Comments