Zend Frameworkでob_gzhandlerを使用する。


Firebug用YSlowプラグインが出たことにより、またhttpレスポンス圧縮の話題が再燃しているような気がします。(参考
Apache側でmod_gzip,mod_deflateが設定できれば良いのですが、レンタルサーバなどでは設定できないことが多いです。そういった場合にはPHPでアウトプットを圧縮して送信することができます。方法としては主に

  • php.iniの設定でzlib.output_compression を有効にする。
  • ob_start()のコールバック関数 ob_gzhandler を使用する。

があります。

zlib.output_compressionに関してはとても簡単で、php.iniに

zlib.output_compression = On

の行を入れるだけです。おそらくコメントアウト状態で入っているので、

#zlib.output_compression = Off

コメントアウトを外し、OffをOnに変更するのが簡単です。
これで通常のPHP出力は、圧縮されてクライアントに送信されます。
#この設定はzlib 拡張モジュールがPHPに組み込まれている必要があります
また、zlib.output_compression_level というものがあり、これで圧縮率を変更できるようです。

zlib.output_compression_level = 1

ただ、この設定は(マニュアルを確認すると)変更の可否がPHP_INI_ALLとなっているものの、スクリプト上から変更できない場合があります。
(php.iniで zlib.output_compression = On にされているものをスクリプトでOffにすることはほとんどの場合で可能なようですが・・・)
その場合は ob_gzhandlerを使うしかありません。

Zend Frameworkの出力はob_start()で制御されています。
ob_gzhandlerを使用するには、
[php]
ob_start(“ob_gzhandler”);
[/php]
と、ob_startの引数としてコールバック関数名(ob_gzhandler)を渡すのですが、Zend Frameworkのどこに埋め込みましょう?
使用している箇所はディスパッチャの中ですが、しかし、Zend Framework本体に手を入れるのはあまり好ましくありません。(まだまだバージョン更新が激しいですから:-) 。仕様もいつガラっと変えてくるかわかりません)
じゃあ、ob_startまわりを継承、委譲して作る、というのもよいのですが、ob_start()のマニュアルを見てみると、

出力バッファはスタッカブルであり、このため、他の ob_start() がアクティブの間に ob_start() をコールすることが可能です。この場合、 ob_end_flush() を適切な回数コールするようにしてください。 複数の出力コールバック関数がアクティブの場合、 ネストした順番で逐次連続的に出力がフィルタ処理されます。

とありますので、起動ファイルでDispatchに渡す前にob_startしてしまいましょう。
[php]
ob_start(“ob_gzhandler”);
Zend_Controller_Front::run(‘/path/to/app/controllers’);
[/php]

無事、圧縮されましたでしょうか。

関連する記事:

Leave a comment ?

39 Comments.

  1. Zend Framework内でSmartyを使っていれば、Smarty中でもob_start()が走っていますね。

  2. Ambien cr. - trackback on 2010/10/8 金曜日 at 20:43:10
  3. 単に したい欲望あなたの記事のようにあると言う驚くべき。 | 単にあなたのポストで鮮明透明性がある クールと私は可能性 |この主題の専門家あなたがしているあなたがあると仮定します。 ファイン今後のポストに| 更新日まで保つために| | フィードRSSフィード私はあなたをつかむためにあなたの許可を持つましょう許可。おかげで百万と継続 お願い喜ばしい仕事。あなたは私の心を読んで、そのような

  4. 私は好き。おそらく、あなたはこれを続けることができましたか?このトピックでは、非常にほとんどの人々のためにイライラされるのに対し

  5. は私の友人からこのウェブサイトを聞きました。彼はここに私を指摘し、私は私が必要なものを見つけるだろう私を知らせました。彼は正しかったです!私は私が持っていたすべての質問を取得し、答えました。でも、それを追求する時間はかかりませんでした。あなたは私のような個人のためのそれはそう単純で行われているという事実を崇拝。

  6. !私はしばらくの間、良好なインターネットビジネスのアイデアを思い付くしようとしてきました。その代わりに、私は多くはそれが始めるためにことを必要としない場合があります完全なインターネットベースのビジネスとは対照的に、このアイデアは、たくさんのお金を必要とするための種類の方法で吸う大きな非インターネットビジネスのアイデア、が出ています。でも、私はあきらめていませんよ。私は最近、私は私の会社を開始するために私の手順を文書化する予定のブログを開始しました。私はそれがやる気に私を維持し、それを維持するために私を強制すると考えました。私もそれが自分の目標を達成しようとして維持するために読者に動機を与えることを願っています。ところで、私はあなたのサイトが大好きです。私は面白いブログの私のリストに追加されます。カルメン@

  7. 私の仲間が私のためにこのブログをブックマークして、私は過去数時間のためにそれを通過してきました。これは本当に私たちのクラスのプロジェクトのために私と私の友人の利益のために起こっています。ところで、私はあなたが書く方法をお楽しみください。

  8. 。彼らのようなスパムメッセージの怒りのライターは、消費者を困らせる場合、私は疑問に思っていますか?私は心から思考のこのコレクションは無期限スパムなしで残ることを希望に対して期待しています。ご入力いただき、ありがとうございます。私はあなたの仕事に感謝します。こんにちは

  9. 。 明らかにこの上の時間たくさんの あなたが持っている可能性があります。 素敵やりました!既に知っているこの問題に関する知識の豊富な人々を探し出しすることが面倒

  10. ?何育てたり議論さNEVEするために使用することは変更されました。率直に言って、それは私たちが変化を見る時間についてです。

  11. 兄は私でしょう、おそらくこのよう提案しました。彼はかつて完全に適切な右でした。これは、提出真 作成製。私はこのために費やしていた時間詳細あなたはどのように 信じることができません!ありがとう! 述べており、いくつかの珍しいケースでは、自殺はかもしれない起こる。何

  12. !彼らはハッカーから保護するために、任意のプラグインを作る場合、あなたは知っていますか?私は上に懸命に働いてきたすべてのものを失うことについてちょっと偏執的です。任意の提言?これについて認識へのバンドルが顕著にあり

  13. こんにちは私の友人)=ありがとうございます!私はこのポストであることを言いたい顕著、良い書かれており、含む約すべての重要なに関する情報。 はるかに多くをこのような記事を私が見てみたいと思います。

  14. どのようにこのブログがこのクールを見て作りました。あなたがチャンスを得ると、あなたの知恵を共有している場合は、私に電子メールを送って下さい。 Idは感謝して。

  15. 回収不能アルタBUONA失望クスクスのレンジャーtalamini gianini Daisiを示し、そのない対象は、普段はあまり注意を与えるが、これは私の注意を引きました。

  16. 私は役立つ貴重なを好き。 ブログをブログ、ここで再度確認し、あなたをブックマーク。 私は 必ず 私がします たくさんの新しいもの右ここ! 幸運を祈る次のために!私のために| 情報情報最も | のうちの1

  17. リアル有益と素晴らしい 話題の解剖学的構造材料、今では、ユーザーの快適な(だ:。。

  18. ここで、それにもかかわらず、私はこれが公開信じられていた優秀。あなたがいるときに、あなたが既に乾杯でないこと|あなたは可能性があります!によって| ウェブログ

  19. 、あなたはいくつかの良い点を説明しました。私はブックマークあなたの投稿したいです。私はおいしいとYahooブックマークにあなたを救いました。私はあなたのブログに再訪し、より多くの記事を検討しようとします。

  20. 私は 通常実行するブログを及びI 実際にあなたを認識しています。コンテンツ素材を ライトアップ 実際私の興味をピーク私はへのブックマークあなたのウェブサイトつもりサイトと続ける新しい詳細

  21. !あなたは明らかに、この上にとても大きいタスクを探査多大をしました。私もブックマークウェブページに保証するつもりです!それを

  22. 。イムはあなたに指を指していないけれども、私はそれが注目してイマイチそのそこに他の人だと思います。

  23. Youreのように右。あなたとそこにイム。誰もがそれを横切って来る場合、あなたのブログは、読み取り間違いなく価値があります。今アイブ氏は、この全体の新しいビューを獲得したので、イムは幸運私でした。私は、この問題は非常に重要なので、ユニバーサルたことを実現していませんでし。あなたは確かに私のための視点でそれを置きます。

  24. はこのためにどうもありがとうございます!私はこれは、長い時間のためのポストによって移動されていません!あなたはそれがブログにあらゆる手段を、それを持っています。人が聞く必要があると言うこと何かを持っているだけでなく、Y​​oureのは間違いなく誰か。良い仕事を続けます。人々を鼓舞し続けます!

  25. をI 非常にに喜ん見つけるこののために求めて:だけでなく適切お気に入りに保存

  26. クレスピシェラックsmackmelon bukovsky宗主権gaetz masenずんぐり課金三木moevemansが再びあなたのウェブページを訪問するニース

  27. GR8 resrch仲間私はyouveはいくつかの実際に興味深いポイントを作成したと思う

  28. メジャーリーグの本、私はその激突を行う色か悪い文法場合知らないが、このブログは恐ろしいです!私は、しかし、あなたは、おそらくこの主題に少し余分な力を入れていますが、知ったかぶりか何かのように聞こえるしたいいけない、意味しています。その本当に興味深いのは、しかし、あなたは男、すべてでそれをうまく特徴付けるいけません。とにかく、私の言語で、通常はこのような多くの十分な供給がありません。イムが気になる投稿されてい

  29. また、友情、誕生日、愛のように巨大なSMSコレクションを取得し、はるかにすることができましたが、それは確かに私はあなたがここに持っているものと同じくらい面白いと興味をそそられるネット上で何かを発見するための重要な1つは稀に

  30. アン魅力的な読み取りは、私はかもしれない完全に同意していないが、あなたは、いくつかの極めて作るのですか、有効なポイントを。

  31. いただきありがとうございます。すべてWeb上でこの情報を探していました。ブリリアント

  32. 私はこのようなウェブサイト 非常に かなりのではるか見事情報。

  33. きれい概念を一緒に入れて、そのために理解されなければならないこれはです。何を説明していただきありがとうございますと言うことにします。

  34. 単にここで笑って、訪問者が共有すること(愛:。、ところで優れたスタイル ‘Audacityは、はるか大胆さと常に大胆 ‘ジョルジュ·ジャック·ダントンによって私の配偶者を

  35. 、二輪車について何を愛して!あなたの人生、通常入手しにくい多くの時間である選択についての多くの偉大なF

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

Trackbacks and Pingbacks: