php输出缓冲区和缓存技术实现

  • 系统缓冲区定义:一个内存地址空间,用来存储速度不同步的设备或者优先级不同的设备之间存储数据。例如使用vim编辑器时,系统并不会立即把一个字符写入 磁盘而是缓冲区,当写满时或者调用flush()函数时才保存到磁盘上。

  • php输出缓存区:默认时当echo或者print时,先把输出文本放在php输出缓存区时,等到缓存区满了或者服务端脚本结束时才返回给用户

  • php缓冲区,默认缓冲大小是4096,4K,当缓冲区满了才会返回给浏览器

    public function index()
    {
    	// 
    	for($i=0;$i<10;$i++)
    	{
    		echo "$i"."<br />"
    		sleep(1);
    	}
    }
    
  • 这个是达到缓冲的最大值,每一秒输出一次

    public function index()
    {
    	ob_end_clean();
    	$str=str_repeat('a', 512);
    	for($i=0;$i<10;$i++)
    	{
    		echo $str.'<br />';
    		flush();   // 把系统缓冲强制返回给浏览器
    		sleep(1);
    	}
    }
    
    • 使用ob_start()函数会把缓冲大小范围变得很大,还是要等待程序结束才一起输出
    public function index()
    {
    	ob_start();
    	$str=str_repeat('a', 512);
    	for($i=0;$i<10;$i++)
    	{
    		echo $str.'<br />';
    		flush();   // 把系统缓冲强制返回给浏览器
    		sleep(1);
    	}
    }
    
  • 将输出缓冲区内容写到文件中去

    public function index()
    {
    	for($i=0;$i<10;$i++)
    	{
    		echo $i.'<br />';
    	}
    	$f=fopen('D:/test/ob.txt','w') or die('文件不存在');
    	fwrite($f, ob_get_contents());
    }
    
    • 一个文件时间的概念
      • ctime(change time):状态修改时间(文件权限等) filectime:返回时间戳或者false
      • atime(access time):上一次访问时间 fileatime
      • mtime(modify time):文件内容修改时间 filemtime
    • 将html文件内容写到文件中
    <html>
    <head>
    	<title></title>
    </head>
    <body>
       my name is {$name}
    </body>
    </html>
    <?php 
     	$f=fopen('D:/test/ob.html','w') or die('文件不存在');
    	fwrite($f, ob_get_contents());
    	fclose($f); 
    ?> 
    
    • 简单缓存一个页面的例子
    public function index()
    {
    	if(cache('index')){
    		return cache('index');
    	}
    	cache('index',view('',['name'=>'power']),10);
    	return view('',['name'=>'power']);
    }
    
    • 一些常用函数
      • ob_start() //打开一个输出缓冲区,所有的输出不再直接发送给浏览器二十缓冲区
      • ob_get_contents() // 获取缓存区中的内容
      • ob_end_clean() // 删除缓冲区中的内容,关闭缓冲区
      • ob_end_flush() // 发送内部缓冲区内容到浏览器并且关闭输出缓冲区
      • flush() // 通知操作系统底层,尽快把数据发给客户端浏览器
      • ob_clean() // 删除缓冲区的内容
      • ob_flush() //把输出缓存区中的内容返回到浏览器,删除缓冲区的内容

猜你喜欢

转载自blog.csdn.net/qq_40941787/article/details/83508194
今日推荐