ホームページ >バックエンド開発 >PHPチュートリアル >PHP_PHP チュートリアルでの出力バッファリング
PHP では、echo と print が実行されると、出力は tcp を介して表示のためにクライアント ブラウザにすぐに送信されませんが、データは php バッファに書き込まれます。 phpのoutput_bufferingメカニズムは、tcpバッファの前に新しいキューが確立され、データがそのキューを通過する必要があることを意味します。 PHP バッファーがいっぱいになると、スクリプト プロセスは PHP バッファー内の出力データをシステム カーネルに渡し、表示のために TCP 経由でブラウザーに渡します。したがって、データは、echo/pring -> php バッファ -> tcp バッファ -> ブラウザの順序でこれらの場所に書き込まれます
PHP にはリフレッシュ バッファリングに関連する 3 つの関数があります:
1) フラッシュ
PHP が実行される状況に関係なく、PHP プログラムのバッファをフラッシュします。この関数は、これまでのプログラムの出力をすべてユーザーのブラウザに送信します。 ただし、この関数はサーバーまたはクライアントのブラウザーのキャッシュ モードに影響を与えず、また PHP 自体のキャッシュにも影響を与えません。
2).ob_flush
この関数はPHP自体のキャッシュを出力します。 PHP 自体のキャッシュは、php.ini の output_buffering によって制御されます。 ob_flush() の機能は、元々出力キャッシュに格納されていたコンテンツを取り出して出力待機状態に設定することですが、この場合、最初に ob_flush() を使用する必要があります。次に、flush() を実行すると、クライアントはスクリプトの出力をすぐに取得します。
3).ob_implicit_flush
この関数は、出力があるたびに出力を直ちにブラウザに強制的に送信します。この方法では、各出力 (エコー) の後にフラッシュ() を使用してブラウザに送信する必要はありません。
例
下面是很简单的一段代码
<?php /*--------------------编写自己的缓存类---------------*/ class my_cache{ //定义有关变量 private $cache_time;//缓存有效时间 private $cache_file;//缓存文件保存路径 //初始化类,默认是index.html时间是1 function __construct($cache_file='index.html',$cache_time="1"){ $this->cache_file=$cache_file; $this->cache_time=$cache_time; } //缓存开始 function cache_start(){ if ($this->cache_active){ include($this->cache_file); exit; } //开启缓存 ob_start(); } //判断缓存文件是否存在并且可用 function cache_active(){ //判断文件是否存在 if(file_exists($this->cache_file)){ $last_time=@filemtime($this->cache_file);//获取最后修改时间 //判断时间是否可用 if($this->cache_time<$last_time){ //可用,包含进来直接显示 return true; }else{ //删除该缓存,重新建立缓存 unlink($this->cache_file); return false; } } } //进行缓存目录的生成 function cache_creat(){ //不用判断直接生成缓存文件目录及文件,循环生成文件 $file=explode("/", $this->cache_file); $num=count($file)-1; for ($i=0;$i<$num;$i++){ $tm.=$file[$i]."/"; if (!file_exists($tm)){ mkdir($tm); } } } //缓存的输出 function cache_end(){ $cache_content=ob_get_contents(); $this->cache_creat(); $fp=@fopen($this->cache_file, "w+"); fwrite($fp, $cache_content); ob_end_flush(); } //缓存的清除 function cache_clean(){ if(unlink($this->cache_file)){ return true; }else { $this->alert("缓存删除失败!请检查缓存文件是否存在"); return false; } } //定义缓存文件的提醒函数 function alert($a){ echo "<script>alert('$a');</script>"; } } ?> 测试页面test.php <? include 'cache_my_class.php'; $my_cache=new my_cache("./chunge/ge/hao/index.html",5); $my_cache->cache_start(); //在页面的最开始 -------页面输出 $like="我爱吃橘子香蕉!"; echo $like."<br>"; $my_cache->cache_end();//最后进行输出