Skip to content

Instantly share code, notes, and snippets.

@sasezaki
Last active August 29, 2015 14:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sasezaki/fb703148b0542d61f0bb to your computer and use it in GitHub Desktop.
Save sasezaki/fb703148b0542d61f0bb to your computer and use it in GitHub Desktop.
ストリーム 関連のプロジェクトの話

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

ここ最近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タグが評価される(たしか)

興味のあるもの

おしかったです

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

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


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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment