PHP的输入缓冲区
在PHP中有一个名为“输入缓冲区”「ob」的货色。PHP的输入流蕴含很多字节,通常是echo语句或者printf()函数输入的。这些货色的数据须要用到输入缓冲区。
个别PHP的输入就是依照下面这张图在各个缓冲区间流转,然而cli模式下有些非凡。在cli模式下ini的配置中_output_buffer_选项强制设置为0、_implicit_flush_的值也会被设置为1。
- output_buffer=0: 示意禁用默认PHP输入缓冲区。所以在cli中国呢,默认状况下你要输入的货色会间接传递到SAPI层,除非你手动调用ob_()类函数。
- _implicit_flush=1: _当_implicit_flush_被设置为关上(值为1),一旦有任何输入写入到SAPI缓冲区层,它都会立刻刷新(flush,意思是把这些数据写入到更低层,并且缓冲区会被清空)。个别会是规范输入管道,write()和fflush()这两个函数就是负责干这个事件的。
-
默认输入缓冲区
对于缓冲区的配置选项的值会在PHP程序启动的时候,还没有运行任何脚本之前解析,所以在脚本启动之后应用ini_set()去设置是没有成果的。
在web应用环境中对输入的内容应用缓冲区对性能有益处。这意味着你能够先写入一些字符,而后再跟上面的SAPI层通信。并且在web应用环境中,通过socket一个字节一个字节的传输音讯的形式对性能并不好。更好的形式是把所有内容一次性传输给服务器,或者至多是一块一块地传输。层与层之间的数据交换的次数越少,性能越好。
对于FastCGI协定,刷新操作(flushing)是每次写入后都发送一个FastCGI数组包(packet),如果发送数据包之前先把FastCGI的缓冲区写满会更好一些。
能够应用flush()函数显式刷新SAPI缓冲区。
用户输入缓冲区
应用ob_start()创立用户输入缓冲区。这些缓冲区组成一个堆栈构造,每个新建缓冲区都会重叠到之前的缓冲区上,每当它被填满或者溢出,都会执行刷新操作,而后把其中的数据传递给下一个缓冲区。
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);
继续执行工作
发表回复