zoukankan      html  css  js  c++  java
  • 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缓冲区中的数据拷贝。

  • 相关阅读:
    关于requests.exceptions.SSLError: HTTPSConnectionPool(host='XXX', port=443)问题
    python Requests库总结
    fiddler实现手机抓包及手机安装证书报错“无法安装该证书 因为无法读取该证书文件”解决方法
    django接口的工作原理
    postman+newman+jenkins 持续集成搭建及使用,实现接口自动化
    Jmeter之JDBC Request及参数化
    selenium+Python中的面试总结
    UI自动化测试:页面截图的3种方法
    selenium中通过location和size定位元素坐标
    Allure+pytest生成测试报告
  • 原文地址:https://www.cnblogs.com/yhq-qhh/p/10527420.html
Copyright © 2011-2022 走看看