• PHP中buffer的认知


    buffer其实就是缓冲区,一个内存地址空间,只要用于存储数据区域。

    <?php
    echo 1;

    运行这段代码,浏览器会显示1,其实中间会经历一个buffer(数据1先到buffer,当buffer满了,再将数据传到客户端(浏览器))

    内容 -> php buffer -> tcp -> 客户端(浏览器)

    php.ini    output_buffering = on #默认打开缓冲区

    这里需要注意的是:
    1)使用ini_set是无法修改buffer的设置。
    2)不管php.ini中output_buffering设置,cli模式下的php始终默认是output buffering为关闭的。但是你可以通过ob_start()将buffer打开。
    大家都说:ob_start()是将php buffer打开,ob_end_flush()是将php buffer关闭。ob_start()手动激活php output_buffering机制,使得即便输出超过了4kb数据,也不把数据交给tcp传给浏览器,因为ob_start()将php buffer空间设置到了足够大 。只有直到脚本结束,或者调用ob_end_flush函数,才会把数据发送给客户端浏览器。需要注意的是php.ini中php buffer是关闭的,再次调用ob_end_flush()会报warning。

    缓冲区相关函数

    ob_start() - 打开输出控制缓冲
    ob_get_length() - 返回输出缓冲区的长度
    ob_get_level() - 返回输出缓冲区的嵌套级别
    ob_get_status() - 返回输出缓冲区的状态(数组形式返回,默认返回最顶层,参数为true时返回所有)
    ob_get_contents() - 返回输出缓冲区的内容
    ob_get_clean() - 以字符串格式返回当前输出缓冲区并关闭输出缓冲
    ob_end_clean() - 清空(擦除)缓冲区并关闭输出缓冲
    ob_get_flush() - 以字符串返回输出缓冲区内容并关闭缓冲
    ob_end_flush() - 冲刷出(送出)输出缓冲区内容缓冲并关闭输出缓冲

    ob_end_flush()与ob_end_clean()区别

    • 这两个函数都会关闭输出缓冲。

    • 不同的是,ob_end_flush()只是把PHP缓冲区中的数据发送到客户端浏览器,而ob_clean_clean()将PHP缓冲区中的数据删除,但不发送给客户端。ob_end_flush()调用之后,PHP缓冲区中的数据依然存在,ob_get_contents()依然可以获取PHP缓冲区中的数据拷贝。

  • 相关阅读:
    4.异常捕获后再次抛出
    图像滤镜处理算法:灰度、黑白、底片、浮雕
    JAVA层和JNI层实现Bitmap图镜像功能。
    关于ARGB_8888、ALPHA_8、ARGB_4444、RGB_565的理解
    镜象变换的源代码
    android 图像处理(黑白,模糊,浮雕,圆角,镜像,底片,油画,灰白,加旧,哈哈镜,放大镜)
    android获取项目下的一张图片的绝对路径问题以及解决方法
    fwrite用法
    关于毁灭地球
    memset,memcpy
  • 原文地址:https://www.cnblogs.com/yhq-qhh/p/10527420.html
Copyright © 2020-2023  润新知