0

ページを圧縮したかったので、

ob_start('ob_gzhandler');

私のphpヘッダーファイルの先頭にあります。しかし、いじっていると、ob_gzhandler が使用されていないときにセッションを開始すると、空白のページが表示されることに気付きました。だから私は以下を行い、それはうまくいった:

<?php
  if (session_id() === null ) ob_start('ob_gzhandler');
?>

セッションである可能性があると想像しているため、これが常に圧縮を使用するかどうかはわかりませんが、ブラウザーはまだ圧縮されていないデータを受け取ります! シナリオが発生した場合、セッションを再起動する必要があると思いますが、これは開発時以外には本当にすべきではありません。しかし、私が本当に知りたいのは、zlib とこの圧縮に関する簡単なヒントだと思います。パフォーマンスのヒントはありますか?ファイルの最後に表示がない場合、サーバーは内部バッファーを出力すると思いますが、そこに配置する必要がありますか? ob_end_flushob_end_clean?ob_end_close?

これで memcache を使用する際の注意事項はありますか? ヒントや情報をいただければ幸いです。

4

1 に答える 1

0

ob_gzhandler()はデータを圧縮する前に、ブラウザーが受け入れるエンコードのタイプを確認します。gzipを使用するか、またはdeflate(おそらく他のこともありますが、よくわかりません)すると、その圧縮で出力が出力されます。すべての一般的なブラウザがサポートされており、独自のコードを記述したり、検索エンジンスパイダーについて心配したりする場合でも、圧縮ページを受け入れることを示す正しいHTTPヘッダーを送信するのはHTTPリクエスター次第です。また、ブラウザが圧縮ページをサポートしていない場合、この関数はFALSEを返し、圧縮は適用されません。

これがphpmanからの他のものです: ob_start この関数は出力バッファリングをオンにします。出力バッファリングがアクティブな間、スクリプトからの出力(ヘッダー以外)は送信されません。代わりに、出力は内部バッファーに格納されます。

この内部バッファの内容は、ob_get_contents()を使用して文字列変数にコピーできます。内部バッファに保存されているものを出力するには、ob_end_flush()を使用します。または、ob_end_clean()はバッファの内容をサイレントに破棄します。警告

一部のWebサーバー(Apacheなど)は、コールバック関数を呼び出すときにスクリプトの作業ディレクトリを変更します。コールバック関数でchdir(dirname($ _ SERVER ['SCRIPT_FILENAME']))などを使用して元に戻すことができます。

出力バッファはスタック可能です。つまり、別のob_start()がアクティブなときにob_start()を呼び出すことができます。ob_end_flush()を適切な回数呼び出すようにしてください。複数の出力コールバック関数がアクティブな場合、出力はネストされた順序でそれらのそれぞれを順番にフィルタリングされます。

繰り返しますが、この部分はphpマニュアルからコピーされています!

于 2010-08-14T05:48:03.040 に答える