PHP的输入缓冲区
在PHP中有一个名为“输入缓冲区”「ob」的货色。PHP的输入流蕴含很多字节,通常是echo语句或者printf()函数输入的。这些货色的数据须要用到输入缓冲区。 对于缓冲区的配置选项的值会在PHP程序启动的时候,还没有运行任何脚本之前解析,所以在脚本启动之后应用ini_set()去设置是没有成果的。 在web应用环境中对输入的内容应用缓冲区对性能有益处。这意味着你能够先写入一些字符,而后再跟上面的SAPI层通信。并且在web应用环境中,通过socket一个字节一个字节的传输音讯的形式对性能并不好。更好的形式是把所有内容一次性传输给服务器,或者至多是一块一块地传输。层与层之间的数据交换的次数越少,性能越好。 对于FastCGI协定,刷新操作(flushing)是每次写入后都发送一个FastCGI数组包(packet),如果发送数据包之前先把FastCGI的缓冲区写满会更好一些。 能够应用flush()函数显式刷新SAPI缓冲区。 应用ob_start()创立用户输入缓冲区。这些缓冲区组成一个堆栈构造,每个新建缓冲区都会重叠到之前的缓冲区上,每当它被填满或者溢出,都会执行刷新操作,而后把其中的数据传递给下一个缓冲区。
个别PHP的输入就是依照下面这张图在各个缓冲区间流转,然而cli模式下有些非凡。在cli模式下ini的配置中_output_buffer_选项强制设置为0、_implicit_flush_的值也会被设置为1。默认输入缓冲区
用户输入缓冲区
web申请立刻返回,而后后盾继续执行工作。echo json_encode(['code' => 200]);$size = ob_get_length();header("Content-Length: $size");header('Connection: close');ob_end_flush();ob_flush();flush();在敞开连贯后,持续运行php脚本ignore_user_abort(true); 不设置超时工夫set_time_limit(0); 继续执行工作