背景:估计那个同学想做PHP的长连接,或者是想有些较为少用的用法,但它涉及到了缓冲的概念(PHP和Apache,PHP和Nginx等,Web服务器的一个接口等)
关于PHP 刷新缓冲区操作(边执行边输出)简单分析:
PHP群里有一位同学问
这段代码在apache下能边执行边输出,在nginx下怎么就不行了?
简单的理解为2个问题:
1 首先这个问题核心就是当缓冲区数据达到一定量时先输出到浏览器。
2 apache和nginx 的php执行方式差异。
这个问题和我上篇博文《FastCGI 技术介绍》有一定的联系,apache是以CGI/CLI的方式调用php。而nginx 是以fastcgi方式调用PHP。FastCGI 基于Unix domain socket或者tcp/ip进行通信。
步骤 名称 描述
1 FCGI_PARAMS 从web服务器如nginx向fastcgi应用程序发送请求数据、环境变量等
2 FCGI_STDIN 接送从web服务器发送来的数据
3 FCGI_DATA 过滤web服务器发送来的数据
4 FCGI_STDOUT 发送数据到web服务器
5 FCGI_STDERR 发送状态(错误信息)到web服务器
6 FCGI_END_REQUEST 结束本次http请求
就是意味着可以设置一定的缓冲区大小 来实现。
土话就是:人为让缓冲区容量达到一定额。
nginx FastCGI 提供了2个参数
修改nginx.conf
参数可以调整。具体文档:http://wiki.nginx.org/HttpFastcgiModule#fastcgi_buffer_size
修改上述PHP代码
来自:http://www.cydphp.cn/?p=155
再就是这位兄弟的:http://www.cydphp.cn/?p=107 【写得比较原始,原始的CGI,当年没有PHP时是这么干的,可以有较为深入的理解】
关于PHP 刷新缓冲区操作(边执行边输出)简单分析:
PHP群里有一位同学问
这段代码在apache下能边执行边输出,在nginx下怎么就不行了?
简单的理解为2个问题:
1 首先这个问题核心就是当缓冲区数据达到一定量时先输出到浏览器。
2 apache和nginx 的php执行方式差异。
这个问题和我上篇博文《FastCGI 技术介绍》有一定的联系,apache是以CGI/CLI的方式调用php。而nginx 是以fastcgi方式调用PHP。FastCGI 基于Unix domain socket或者tcp/ip进行通信。
步骤 名称 描述
1 FCGI_PARAMS 从web服务器如nginx向fastcgi应用程序发送请求数据、环境变量等
2 FCGI_STDIN 接送从web服务器发送来的数据
3 FCGI_DATA 过滤web服务器发送来的数据
4 FCGI_STDOUT 发送数据到web服务器
5 FCGI_STDERR 发送状态(错误信息)到web服务器
6 FCGI_END_REQUEST 结束本次http请求
就是意味着可以设置一定的缓冲区大小 来实现。
土话就是:人为让缓冲区容量达到一定额。
nginx FastCGI 提供了2个参数
修改nginx.conf
参数可以调整。具体文档:http://wiki.nginx.org/HttpFastcgiModule#fastcgi_buffer_size
修改上述PHP代码
来自:http://www.cydphp.cn/?p=155
再就是这位兄弟的:http://www.cydphp.cn/?p=107 【写得比较原始,原始的CGI,当年没有PHP时是这么干的,可以有较为深入的理解】
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/6182/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
最后编辑: jackxiang 编辑于2013-3-29 15:34
评论列表