Home >Backend Development >PHP Tutorial >php中什么是buffer?

php中什么是buffer?

PHPz
PHPzOriginal
2016-06-13 11:31:492417browse

在php中,buffer其实就是缓冲区,一个内存地址空间,主要用于存储数据;默认是开启状态,大小默认4096,在php.ini文件中由output_buffering配置。

php中什么是buffer?

php中什么是buffer?

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

在PHP中,buffer(缓冲区)默认是开启的,大小默认4096(4kb),在php.ini配置文件中由output_buffering配置。

php.ini

output_buffering = on

#打开output缓冲,默认打开的。

当执行php执行echo,print的时候,是先将数据写入php的buffer,当一个php buffer写满的时候,脚本进程会将php的buffer数据发送给系统内核交由tcp传给浏览器显示。

<?php
echo 1;

我们都运行程序浏览器访问,会显示1。

但是其实这中间会经历一个buffer,我们可以这样理解:这个1数据会先到php缓存区,当这个缓冲区满了之后,再传给客户端(浏览器)。

数据流程

echo/pring -> php buffer -> tcp buffer (服务器系统buffer)-> 浏览器 buffer ->浏览器展示

浏览器buffer:

目前浏览器普遍为8000Bytes(可能用户可以设置,未亲测),测试 Chrome与360极速模式为8000Bytes,只有输出数据达到了这个长度或者脚本结束浏览器才会将数据输出在页面上。

output_buffering打开与关闭的区别:

1.打开了php输出缓存: echo,print -> php output_buffring -> server buffering -> browser buffering -> browser display

2.未打开php输出缓存: echo,print -> server buffering -> browser buffering -> browser display

我们在代码里获取缓存区内容:

<?php
echo 1;
echo "
"; // 获取php缓存区的内容 $buffer = ob_get_contents(); echo $buffer;

如果在php配置文件php.ini中output_buffering = on是开启的,那么上面代码在浏览器上会显示2个1和2条横线,查看网页源代码如下:

1<hr/>1<hr/>

如果php.ini中是关闭的,那么只会显示一次。

当然我们也可以在代码中,临时开启php缓冲区

<?php
ob_start(); // 开始php缓存,写在最前面
echo 1;
echo "<hr/>";
// 获取php缓存区的内容
$buffer = ob_get_contents();
echo $buffer;

更多相关知识,请访问 PHP中文网!!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn