之间的差异的详细解释PHP冲洗()和()ob_flush
Buffer is a memory address space, and the default size of the Linux system is generally 4096 (1KB), that is, a memory page.It is mainly used to store areas where data are transmitted between devices with asynchronous speed or between different devices with different priority.Through buffer, the mutual waiting of the process can be reduced.Here that a popular example of the point, when you open a text editor to edit a file, every time you enter a character, operating system does not immediately put this character directly written to the disk, but the first to write to buffer, when filled with a buffer to buffer, the data is written in of course, when the disk, calling a kernel function (flush) was forced to put the dirty data in buffer writ十回磁盘。
以同样的方式,当回波,打印时,输出不是立即通过TCP的客户端浏览器,但写入PHP缓存,PHP output_buffering机制意味着一个新的队列已经在TCP缓冲设置,和数据必须通过队列。当PHP缓存是满的,剧本的过程将输出发送数据从PHP缓存系统内核并将其发送到浏览器的浏览器显示它。所以,数据依次写这几个地方的回声/弹簧-> PHP缓存-> TCP ->缓存浏览器
PHP output_buffering --- ob_flush()
默认情况下,PHP的缓冲区是开放的,和缓冲区的默认值是4096,即1kb。你可以在php.ini配置文件中找到output_buffering配置。当回声,打印输出时,用户数据,输出数据将写入PHP output_buffering,直到output_buffering写的,将这些数据通过TCP传输到浏览器显示。你也可以激活PHP output_buffering机制通过手动ob_start(),这样即使产量超过1kb数据,它不真的将控制数据,并传送到浏览器,因为ob_start()设置足够的PHP缓存空间的数据不会被发送到客户端浏览器,直到脚本完成,或ob_end_flush函数被调用。
这两个函数的使用如果对许多人来说,最令人困惑的是一个问题,对解释的两个函数手册是模糊的,不清楚他们之间的区别,似乎两个函数的输出缓存刷新。但在我们的文章的第一个代码,如果fush()被ob_flush(),程序不能正确执行。显然,他们是不同的,否则手动显示,其中一个是另一个函数的别名,也没必要解释,那么它们之间有什么区别
当未打开缓存时,脚本输出的内容将在服务器端等待输出。可以将等待的输出立即发送给客户机。
打开缓存后,脚本输出的内容存储在输出缓冲区中,并且没有等待输出状态的内容。你将使用同花顺()直接送什么客户,ob_flush()的功能是从原始的输出缓存中提取内容并将其设置为等待输出的状态,而不是直接给客户。然后你需要使用ob_flush()先使用同花顺(),这样客户可以立即得到的脚本的输出。
1。平和ob_flush正确的顺序是正确的,第一ob_flush然后冲洗,如下:
ob_flush();
同花顺();
如果Web服务器的操作系统是Windows系统,反向或没有ob_flush()是没有问题的。{是},但输出缓冲区不能被刷新的Linux系统。
输出缓冲功能
1.bool ob_start($ output_callback { int {回调,美元chunk_size { } } }美元bool,擦除)
output_buffering机制的激活,一旦被激活,该脚本的输出不再是直接到浏览器,但暂时写入PHP缓存区。
PHP打开output_buffering机制,默认情况下,只有通过调用ob_start()函数扩展到一个足够大的值,根据output_buffering值。你也可以指定为chunk_size指定chunk_size美元的output_buffering.the默认的值是0,这表明直到剧本结束,在PHP缓冲区中的数据将被发送到浏览器。如果你设置的chunk_size美元的规模,这意味着缓冲区中的数据只要将缓冲区中的数据长度达到该值发送到浏览器。
当然,你可以通过指定ouput_callback.for美元例子缓冲处理数据的功能,ob_gzhandler,压缩数据在缓冲区中,然后将其发送到浏览器。
第三个参数:缓存是否被删除,可选,默认为true,如果设置为false,缓存将在脚本执行结束之前被清除。
2.ob_get_contents
得到一份在PHP缓存数据。值得注意的是,你应该在ob_end_clean调用这个函数()函数调用,否则ob_get_contents()返回一个空字符。
你可以使用ob_get_contents()来获取服务器端缓存的数据在一个字符串的形式。
使用ob_end_flush()将输出缓存和关闭缓存数据。
使用的ob_end_clean()是沉默的清除服务器端缓存数据,没有任何数据或其他行为。
服务器端缓存堆积起来,也就是说,开盘后ob_start(),你可以打开另一个缓存ob_start()里面。
但还必须确保缓存操作与缓存操作的数量一样多。
(ob_start)可以指定处理缓存数据的回调函数,如果(ob_start)嵌套在另一个(ob_start),我们假设的ob_start外层(一)、数量、内ob_start(B)的数量,每个人做了一个回调函数是函数和函数,然后B缓存的数据输出,它将先进的funcitonb回调函数,然后在函数回调函数的外层,输出到客户端。
此外,手册说,某些Web服务器,如Apache,回调函数的使用可以改变程序的工作目录的解决方案是在回调函数中手动更改工作目录修改回来,用chdir函数,这似乎并不经常遇到的时候,记得检查手册。
3.ob_end_flush and ob_end_clean
这两个功能有点相似,他们都关掉ouptu_buffering机制。但不同的是,ob_end_flush只是将数据从PHP缓冲客户浏览器,而ob_clean_clean清空数据在PHP bufeer(擦除),但它不发送到客户端浏览器。同花顺发送是PHP。
在ob_end_flush呼叫,在PHP的缓冲区中的数据仍然存在,与ob_get_contents()还可以得到一份在PHP缓存数据。
在ob_end_flush()调用,ob_get_contents()将一个空字符串,而浏览器不能接收输出,就是没有输出。
你可以使用ob_get_contents()得到的字符串形式的服务器端缓存数据,并使用ob_end_flush()输出缓存的数据并关闭缓存。
使用的ob_end_clean()是沉默的清除服务器端缓存数据,没有任何数据或其他行为。
服务器端缓存堆积起来,也就是说,开盘后ob_start(),你可以打开另一个缓存ob_start()里面。但你也必须确保缓存操作的缓存操作的数量一样多的封闭。
(ob_start)可以指定处理缓存数据的回调函数,如果(ob_start)嵌套在另一个(ob_start),我们假设的ob_start外层(一)、数量、内ob_start(B)的数量,每个人做了一个回调函数是函数和函数,然后B缓存的数据输出,它将先进的funcitonb回调函数,然后在函数回调函数的外层,输出到客户端。
此外,手册说,某些Web服务器,如Apache,回调函数的使用可以改变程序的工作目录的解决方案是在回调函数中手动更改工作目录修改回来,用chdir函数,这似乎并不经常遇到的时候,记得检查手册。