• 二,PHP缓存机制详解


    一,PHP缓存机制详解

          我们可以使用PHP自带的缓存机制来完成页面静态化,但是仅靠PHP自身的缓存机制并不能完美的解决页面静态化,往往需要和其他静态化技术(通常是伪静态技术)结合使用。

          output buffer是php自带缓存,可以通过配置php.ini关闭,程序缓存是一直开启状态,没法关闭。程序缓存中内容没法修改,output buffer中内容可以修改,修改完成后全部发给程序缓存。

          当我们设计一个通信协议时,“消息头/消息体”的分割方式是很常用的,消息头告诉对方这个消息是干什么的,消息体告诉对方 怎么干。HTTP传输的消息也是这样规定的,每一个HTTP包都分为HTTP头和HTTP体两部分,后者是可选的,而前者是必须的。一个网页对应一个消息,发送消息时候,一般来说,都是先消息头部分,在消息头部分指明了 消息体部分的长度,然后使用 来表示消息头部分结束,接下来是消息体部分。如果没有定义消息头,发送默认的消息头。

          由图可知,浏览器向apache发送http请求后,apache根据httpd.conf文件,将请求转发给php处理模块,php处理模块根据php.ini处理test2.php,如果php.ini关闭output buffer,那么php处理模块将信息头部和信息内容直接发送给程序缓存,如果php.ini开启output buffer,那么php处理模块将信息头部和信息内容直接发送给Output buffer,Output buffer接收完后再发送给程序缓存。

    通过以下实例学习消息与php缓存,配置php.ini。

    (1)php.ini,output_buffering=off,关闭php缓存;

    (2)display_errors = on,显示错误;

    (3)error_reporting=E_ALL & ~E_NOTICE,表示所有非NOTICE级别的错误日志都打印出来;

    之后执行以下代码。

    <?php
    echo “aaa”;
    header(“content-type:text/html;charset=utf-8”);
    echo “hello”;
    ?>
    

      这段程序报警告。PHP处理模块一边处理程序,一边将处理结果发送到程序缓存,处理第1行,将默认消息头以及aaa作为消息体一部分发送到程序缓存,执行第2行,再次发送消息头,此时程序缓存中有消息头了,且没法修改,此时报警告。因此可以在程序中将output buffer开启,

    <?php
    ob_start();
    echo “aaa”;
    header(“content-type:text/html;charset=utf-8”);
    echo “hello”;
    ?>
    

      执行第1行开启缓存,执行第2行,将默认消息头以及aaa作为消息体一部分发送给output buffer,执行第3行,修改消息头,执行第4行,将hello发送给output buffer,程序执行完后,output buffer将消息发送给程序缓存,程序缓存输出。

    二,下面是一些php自带缓存指令:

    ob_start()  //开启缓存

    ob_clean()  //清空缓存

    ob_end_clean()  //清空缓存,关闭缓存

    ob_flush() //刷新缓存(将缓存现有内容输出)

    ob_end_flush()  //刷新缓存,并关闭缓存

    $contents = ob_get_contents() //获得缓存内容

    file_put_contents("d:/log.txt",$contents) //将缓存内容打印到文本

    三,flush与ob_flush区别

    flush()是输出程序缓存指令;

    ob_flush()是输出自带缓存指令;

  • 相关阅读:
    技术人生:墨菲定律
    Ioc:Autofac Registration Concepts
    Ioc:autofac lifetime scope.
    Ioc:The basic pattern for integrating Autofac into your application
    Logstash filter 插件之 date
    配置 Elasticsearch 集群
    Linux 命名管道
    Linux 管道
    Golang 入门 : channel(通道)
    Golang 入门 : 竞争条件
  • 原文地址:https://www.cnblogs.com/usa007lhy/p/5421545.html
Copyright © 2020-2023  润新知