• 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缓冲区中的数据拷贝。

  • 相关阅读:
    傻帽
    csc编译c#文件
    真空
    继承,多态及抽象性
    HASH算法
    正则表达式
    js向数组和map添加元素
    详解TypeScript项目中的tsconfig.json配置
    TS:元素隐式具有 “any“ 类型,因为类型为 “any“ 的表达式不能用于索引类型
    yarn基本命令
  • 原文地址:https://www.cnblogs.com/yhq-qhh/p/10527420.html
Copyright © 2020-2023  润新知