PHP ob_start()関数の説明

2015 ワード

php ob_startとob_end_flush()はphpのバッファ出力関数です.
ob_start([string output_callback])-出力バッファを開きます.すべての出力情報はブラウザに直接送信されず、出力バッファに保存されます.出力結果情報を処理するためにコールバック関数が選択できます.
ob_end_flush-出力バッファの内容を終了(送信)し、出力バッファを閉じます.
php出力物は、phpメンテナンスのメモリに保存されます.bufferと呼ばれてもいいし、キャッシュしてもいいし、同じ意味です.そしてこのbufferがいっぱいになるとphpは自動的にweb serverにこれらのデータを送信します.
つまりechoのたびに必ず出力されるものではなく、bufferに保存されるということです.
ob_start()の意味は、(でも実は私の次の言い方とは違います)、このbufferはob_シリーズの関数は制御して、つまり、PHPは自分のbufferを維持することはできなくて、自動的にbufferの内容をweb serverに送信することはできなくて、あなたのob_までend()または類似のob操作.
ob_関数は一般的に現在の出力をキャプチャするために使用され、効率とは関係ありません.なぜ出力をキャプチャするのかというと、理由はたくさんあります.例えば、出力をキャプチャして、1つのファイルにキャッシュして、次のリクエストでこのcacheファイルの内容を直接読んで出力することができます.1 ob_start(); 2 3 echo   ob_get_contents() ;
上のようなコードですが、何の意味もないコードです.
よく考えてみると、ネットで検索してみると、かなりの初心者(技術的な初心者は、必ずしもPHPの一年生ではなく、一生初心者である人もいる)で、obの役割を理解していないが、ネット上ではobを出力バッファと呼び、出力が緩んでいるので、かなりの人がobシリーズ関数をPHPページの表示を速めるツールとしている.
実はobはoutput bufferingの略称で、output cacheではありません.obは速度に一定の助けがありますが、盲目的にob関数を加えると、CPUの余分な負担を増やすだけです.次にobの基本的な役割についてお話しします.
  • ブラウザの出力後にsetcookie、またはheader、session_を使用することを防止するstart関数によるエラー.(最初に言ったコードはこのような役割だと思っていましたが、後で友达がそうではないと言いました)、実はこのような使い方は少ないほうがいいので、良いコード習慣を身につけました.
  • は、phpinfoのような取得できない関数の出力をキャプチャします.例えば、HTMLはたくさん出力されますが、$info=phpinfo()などの変数は使用できません.捕まえに来て、この時obは役に立ちました.
  • は、出力されたコンテンツを処理し、例えばgzip圧縮を行い、例えば簡略変換を行い、例えばいくつかの文字列置換を行う.
  • は静的ファイルを生成し、実際にはページ全体の出力をキャプチャしてファイルとして保存し、HTMLを生成したり、キャッシュ全体で使用したりすることが多い.

  • 先ほど述べた3点目のGZIP圧縮については、多くの人が使いたいと思っているかもしれませんが、本当に使っていないので、実は私の友达のコードを少し修正すれば、ページのgzip圧縮を実現することができます.1 ob_start(ob_gzhandler); 2
    はい、ob_を追加します.gzhandlerというコールバック関数でいいのですが、これはちょっと問題があります.一つはzlibサポートが必要で、二つ目はブラウザがgzipをサポートしているかどうかを判断していません(今はサポートされているようですが、iphoneブラウザはすべてサポートされているようです).
    以前はブラウザがgzipをサポートしているかどうかを判断し、サードパーティのgzip関数でob_を圧縮していました.get_contents()の内容、最後にecho.