php缓存学习小记

1.缓冲区作用:把输入或者输出的内容先放进内存,而不显示或者读取;

2.当执行PHP的时候,如果碰到了echo print_r之类的会输出数据的代码,PHP就会将要输出的数据放到PHP自身的缓冲区,等待输出。当PHP自身的缓冲区接到指令,指示要输出缓冲区的内容时,将会把缓冲区内的数据输出到Apache上, A接收到PHP输出的数据,然后再把该数据存到Apache自身的缓冲区内,等待输出。当Apache接受到输出缓冲区的内容的指令时, 将会把缓冲区的内容输出,返回到浏览器PHP输出数据。过程如下:


 

缓冲区在PHP中常见操作:

1.防止header头部报错:

       在使用header函数之前,就已经输出了某些数据,这样会导致某些错误,而header函数是不受缓冲区影响的,当使用header函数时,PHP向Apache发送一个http报头到浏览器,而需要输出的数据并不显示,只是打开输出缓冲区,把这些数据将存放在缓冲区,等待输出.这样就可以避免了之前所发生的错误。

2.通过PHP完成文件下载时避免文件过大响应满,影响内存等:

       当使用fwrite把文件内容读出并显示,然后通过header来发送HTTP头的方法进行文件下载时,如果一个文件很大,假设为100M,那么在不开启缓冲区输出的情况下,必须要把100M数据全部读出,然后一次返回到页面上。如果这样做,一方面用户将会在所有数据读完之后才会得到响应,降低了用户体验感。另一方面,,需要把100M文件全部读入内存,然后再输出,这样占用了大量内存,当程序做了内存限制,这些操作将无法完成。

       如果开启了输出缓冲区,可以使用循环语句分段读取文件,每次读取完毕存入缓冲区输出到Apache,然后让Apache返回浏览器显示,直到把文件全部输出为止,这样浏览器就可以持续地接受到数据,而不必等到所有文件读取完毕。减少用户等待时间。

3.静态页面缓存:

       静态页面缓存是常用方法,生产的数据信息一方面展示在浏览器,一方面存入服务器缓存文件夹,一定时间内直接访问生成的静态页面文件。通过缓存来显著地提高系统的扩展能力,改善系统的响应能力,同时减少系统的负担等。

       1)php.ini关于缓冲区的配置:

                a) output_buffering 该项配置php自身缓冲区:

                        on     - 开启缓冲区
                        off     - 关闭缓冲区
                        256k  - 开启缓冲区,而且当缓冲区的内容超过256k的时候,自动刷新缓冲区(把数据发送apache);

                b) implicit_flush 该项配Apache自身缓冲区:

                        on     - 开启缓冲区
                        off     - 关闭缓冲区

     2)与缓冲区有关的函数

                 flush                        ---发送指令到apache,让apache刷新自身的输出缓冲区.
                 ob_implicit_flush   ---是否自动刷新apache的缓冲区
                 ob_start                  ---打开输出缓冲区,即使output_buffering设置成off,也会打开输出缓冲区
                 ob_flush                 ---指示php本身刷新自身的缓冲区,把数据发送到apache
                 ob_end_flush         ---把php自身的缓冲区里的内容发送到apache,并把清除自身缓冲区内的内容
                 ob_get_contents    ---获取输出缓冲区里的内容
                 ob_get_flush          ---获取缓冲区里的内容,并且把这些内容发送到apache
                 ob_clean                ---清除php缓冲区里面的内容
                 ob_get_clean         ---获取缓冲区的内容之后,清除缓冲区.
    

猜你喜欢

转载自blog.csdn.net/onlyjin/article/details/76672909