php obキャッシュの紹介とob関数の詳細説明

伊谢尔伦
リリース: 2023-03-07 21:36:01
オリジナル
6062 人が閲覧しました

obキャッシュの紹介

obとは、出力バッファリング、出力バッファの略であり、バッファはphp.iniのoutput_buffering変数を通じて制御されます。デフォルト値はオフですが、バッファを開くにはオンに設定できます。バッファーを呼び出した後は、プログラム内で ob 関数が使用されていない場合でも、コードは実際にバッファーを使用します。さらに、php.ini の Output_buffering の設定に関係なく、cli モードの php はデフォルトで常にオフになります。なぜバッファなのか?簡単に言うと、高速CPUが自分のデータを早く処理して、それを回線を通してユーザーに渡したいのですが、回線が狭すぎて一度に送信できません。バッファーが導入されている場合、CPU は生成されたデータをバッファーにすぐに配置し、涼しい場所に保管できます。バッファは指示に従ってタイムリーにデータを出力します。これにより、高速 CPU と低速 I/O デバイスの間の矛盾が効果的に解決されます。

ob の基本原理: ob キャッシュがオンになっている場合、エコー データは最初に ob キャッシュに配置されます。ヘッダー情報の場合は、プログラム キャッシュに直接配置されます。ページが最後まで実行されると、ob キャッシュされたデータがプログラム キャッシュに配置され、順番にブラウザに返されます。

obの基本関数:

1) setcookie()、header()、またはsession_start()などの関数を使用してブラウザが出力した後にヘッダーファイルを送信することによって引き起こされるエラーを防ぎます。実際、この種の使用頻度を減らし、適切なコーディング習慣を身に付ける方が良いでしょう。

2) 取得できない関数の出力をキャプチャします。たとえば、phpinfo() は大量の HTML を出力しますが、この時点では、ob は $info=phpinfo(); のような変数を使用できません。役に立つ。
3) gzip 圧縮、簡体字中国語と繁体字中国語間の変換、一部の文字列置換などの出力コンテンツを処理します。
4) 静的ファイルの生成では、実際にはページ全体の出力をキャプチャし、それをファイルとして保存します。 HTML 生成またはページ全体のキャッシュでよく使用されます。

ob関連関数の詳細説明

1. フラッシュ: バッファの内容を更新して出力します。

関数の形式:

flush()
ログイン後にコピー

説明: この関数は頻繁に使用され、非常に効率的です。

2. ob_start: 出力バッファを開きます。
関数形式:

void ob_start(void)
ログイン後にコピー

説明: バッファがアクティブ化されると、PHP プログラムからのファイル以外のヘッダー情報はすべて送信されず、内部バッファに保存されます。バッファの内容を出力するには、ob_end_flush() または flash() を使用してバッファの内容を出力します。

3、ob_get_contents: 内部バッファの内容を返します。
使用法:

string ob_get_contents(void)
ログイン後にコピー

説明: この関数は、出力バッファがアクティブ化されていない場合、現在のバッファの内容を返します。

4. ob_get_length: 内部バッファーの長さを返します。
使用法:

int ob_get_length(void)
ログイン後にコピー

説明: この関数は、出力バッファーがアクティブ化されていない場合、ob_get_contents と同じように現在のバッファーの長さを返します。その後、FALSE を返します。

5. ob_end_flush: 内部バッファの内容をブラウザに送信し、出力バッファを閉じます。
使用法:

void ob_end_flush(void)
ログイン後にコピー

説明: この関数は、出力バッファーの内容 (存在する場合) を送信します。

6. ob_end_clean: 内部バッファの内容を削除し、内部バッファを閉じる
使用法:

void ob_end_clean(void)
ログイン後にコピー

説明: この関数は内部バッファの内容を出力するのではなく、内部バッファを削除します。

7. ob_implicit_flush: 絶対リフレッシュをオンまたはオフにします。
使用法:

void ob_implicit_flush ([int flag])
ログイン後にコピー

注: Perl を使用したことのある人なら誰でも、$|=x の意味を知っています。また、ob_implicit_flush 関数は次の関数と同じです。デフォルトでは、絶対出力をオンにした後、各スクリプト出力はブラウザに直接送信され、flush() を呼び出す必要はありません


flash 関数のコード例は次のとおりです。 :

<?php
for($i = 1; $i <= 300; $i++ ) print(" ");
// 这一句话非常关键,cache的结构使得它的内容只有达到一定的大小才能从浏览器里输出换言之,如果cache的内容不达到一定的大小,它是不会在程序执行完毕前输出的。经
// 过测试,发现这个大小的底限是256个字符长。这意味着cache以后接收的内容都会源源不断的被发送出去。
For($j = 1; $j <= 20; $j++) {
echo $j."";
flush(); //这一部会使cache新增的内容被挤出去,显示到浏览器上
sleep(1); //让程序"睡"一秒钟,会让你把效果看得更清楚
}
?>
ログイン後にコピー

説明: flash() これは非常に効率的な関数です。その非常に便利な機能は、

ブラウザキャッシュを更新することです。

obシリーズ関数に関するサンプルコード:

例:サーバーとクライアントの設定情報を使用できますが、この情報はクライアントによって異なります。phpinfo()関数の出力を保存したい場合はどうすればよいでしょうか。バッファ制御がない前はまったく方法がなかったとも言えますが、バッファ制御があれば簡単に解決できます。

<?php
ob_start(); //打开缓冲区
phpinfo(); //使用phpinfo函数
$info=ob_get_contents(); //得到缓冲区的内容并且赋值给$info
$file=fopen(\&#39;info.txt\&#39;,\&#39;w\&#39;); //打开文件info.txt
fwrite($file,$info); //写入信息到info.txt
fclose($file); //关闭文件info.txt
?>
ログイン後にコピー

上記の方法を使用すると、以前は不可能だったかもしれない、さまざまなユーザーの phpinfo 情報を保存できます。実は上記は一部の「処理」を「関数」に変換する方法なのです!

静的テンプレートの出力サンプルコードについて:

<?php
ob_start();//打开缓冲区
//php页面的全部输出
$content = ob_get_contents();//取得php页面输出的全部内容
$fp = fopen("output00001.html", "w"); //创建一个文件,并打开,准备写入
fwrite($fp, $content); //把php页面的内容全部写入output00001.html,然后……
fclose($fp);
?>
ログイン後にコピー

いわゆる静的テンプレート技術とは、クライアント側でPHPで生成されたHTMLページをユーザーが何らかの方法で取得できるようにする技術です。この HTML ページが更新されなくなると、別のユーザーがこのページを再度閲覧したときに、プログラムは PHP や関連データベースを呼び出すことがなくなり、大量の情報を含む一部の Web サイトでは、このようなテクノロジーによって大きなメリットがもたらされます。

【おすすめ関連チュートリアル】

1.「

php.cn Dugu Jiijian (4)-phpビデオチュートリアル

2. PHP プログラミングの入門からマスターまでの完全なチュートリアル セット

以上がphp obキャッシュの紹介とob関数の詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート