关于php-fpm通讯时没有REQUEST_METHOD的问题
nginx是通过fastcgi协议来和php通讯的!而php-fpm就扮演了这样的角色
fastcgi协议 中文版http://blog.chinaunix.net/uid-380521-id-2412484.html
英文版 http://www.fastcgi.com/drupal/node/6
fastcgi通讯的顺序

大概是这样
{FCGI_BEGIN_REQUEST, 1, {FCGI_RESPONDER, 0}}
{FCGI_PARAMS, 1, "\013\002SERVER_PORT80\013\016SERVER_ADDR199.170.183.42 ... "}
{FCGI_PARAMS, 1, ""}
{FCGI_STDIN, 1, ""}
{FCGI_STDOUT, 1, "Content-type: text/html\r\n\r\n<html>\n<head> ... "}
{FCGI_STDOUT, 1, ""}
{FCGI_END_REQUEST, 1, {0, FCGI_REQUEST_COMPLETE}}
factcgi传输数据是的一些标志
#define FCGI_BEGIN_REQUEST 1 //开始开传输
#define FCGI_ABORT_REQUEST 2 //中断传输
#define FCGI_END_REQUEST 3 //结束输出
#define FCGI_PARAMS 4 //输出环境变量
#define FCGI_STDIN 5 //输入
#define FCGI_STDOUT 6 //接受数据 fastcgi 返回的数据
#define FCGI_STDERR 7 //接受到错误 fastcgi返回的信息x
今天写了一个dome 是通过fastcgi协议来和php通讯!,
如果在FCGI_PARAMS值传入下面参数,出现了一个很奇怪的问题
char name[] = "SCRIPT_FILENAME"; //让具体脚本执行
char value[] = "/var/www/f.php";
/var/www/f.php的代码
<?php
echo "Hollo World!\n";
file_put_contents("/tmp/php/test.log", "test\n" ,FILE_APPEND);
结果:test.log 没有写入数据,但是返回如下数据
read: Success
X-Powered-By: PHP/5.3.9
Content-type: text/html
read: Success
查看php-fpm的请求日志
127.0.0.1 - 05/Apr/2014:23:33:08 +0800 - - 200 /var/www/f.php
状态是200,说明成功。 但是前面有两个 - -
这个两个的位置是我在php-fpm.conf 加入的 %{REQUEST_METHOD}e、%{SERVER_PROTOCOL}e 这个两个环境变量
REQUEST_METHOD用来表示请发的方法,SERVER_PROTOCOL用来表示请求的协议
一个很奇怪的问题出现了
http状态是200,但是php文件根本没有执行
在传递FCGI_PARAMS时,加入了下面2对参数就正常了
name = "REQUEST_METHOD";
value = "GET"; name = "SERVER_PROTOCOL";
value = "HTTP/1.1";
加入REQUEST_METHOD、SERVER_PROTOCOL之后的
//fastcgi的返回信息
X-Powered-By: PHP/5.3.9
Content-type: text/html Hollo World! //php-fpm的log
127.0.0.1 - 05/Apr/2014:23:35:08 +0800 GET HTTP/1.1 200 /var/www/f.php
//test。log也出现了test
但是无法解释,在web server 传递给factcgi数据时
其FCGI_PARAMS项里面如果REQUEST_METHOD。
则php-fpm为啥不执行SCRIPT_FILENAME文件,但是日志记录是状态为什么会是200并返回如下的数据呢
X-Powered-By: PHP/5.3.9
Content-type: text/html
关于php-fpm通讯时没有REQUEST_METHOD的问题的更多相关文章
- android与服务端通讯时使用到的GZIP压缩及解压
为了减小android项目与服务端进行通讯时的数据流量,我们可以使用GZIP对服务端传输的数据进行压缩,在android客户端解压.或在客户端压缩,在服务端解压.代码如下: android客户端的GZ ...
- 《连载 | 物联网框架ServerSuperIO教程》1.4种通讯模式机制。附小文:招.NET开发,结果他转JAVA了,一切都是为了生活
参考文章: 1.SuperIO通讯框架介绍,含通信本质 2.C#跨平台物联网通讯框架ServerSuperIO(SSIO) 一.感慨 上大学的时候,没有学过C#,花了5块钱在地坛书市买了一本教程,也就 ...
- 【开源】C#跨平台物联网通讯框架ServerSuperIO(SSIO)
[连载]<C#通讯(串口和网络)框架的设计与实现>-1.通讯框架介绍 [连载]<C#通讯(串口和网络)框架的设计与实现>-2.框架的总体设计 目 录 C#跨平台物联 ...
- 《连载 | 物联网框架ServerSuperIO教程》- 5.轮询通讯模式开发及注意事项。附:网友制作的类库说明(CHM)
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- 《连载 | 物联网框架ServerSuperIO教程》- 7.自控通讯模式开发及注意事项
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- 《连载 | 物联网框架ServerSuperIO教程》- 8.单例通讯模式开发及注意事项
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- 开源跨平台IOT通讯框架ServerSuperIO,集成到NuGet程序包管理器,以及Demo使用说明
物联网涉及到各种设备.各种传感器.各种数据源.各种协议,并且很难统一,那么就要有一个结构性的框架解决这些问题.SSIO就是根据时代发展的阶段和现实实际情况的结合产物. 各种数据信息,如下图 ...
- 【重大更新】开源跨平台物联网通讯框架ServerSuperIO 2.0(SSIO)下载
更新具体细节参见:[更新设计]跨平台物联网通讯框架ServerSuperIO 2.0 ,功能.BUG.细节说明,以及升级思考过程! 声明:公司在建设工业大数据平台,SSIO正好能派上用场,所以抓紧时间 ...
- [更新设计]跨平台物联网通讯框架ServerSuperIO 2.0 ,功能、BUG、细节说明,以及升级思考过程!
注:ServerSuperIO 2.0 还没有提交到开源社区,在内部测试!!! 1. ServerSuperIO(SSIO)说明 SSIO是基于早期工业现场300波特率通讯传输应用场景发展.演化而来. ...
随机推荐
- Android ToggleButton使用介绍
ToggleButton,就是开关按钮,包括选中和未选中状态,并且需要为不同的状态设置不同的事件处理: 例如:使用图片来展示ToggleButton不同的状态: MainActivity.java p ...
- TortoiseGit 使用教程
原文地址:http://blog.csdn.net/ethan_xue/article/details/7749639 git的使用越来越广泛 使用命令比较麻烦,下面讲解一下tortoisegit的使 ...
- ZOJ2317-Nice Patterns Strike Back:矩阵快速幂,高精度
Nice Patterns Strike Back Time Limit: 20000/10000MS (Java/Others)Memory Limit: 128000/64000KB (Java/ ...
- 轻量级开源嵌入式关系数据库sqlite基本使用及接口初识
preface,先闲来扯下蛋: 嵌入式数据库,NoSQL的是BerkeleyDB和InnoDB,leveDb.TC(个人较不熟悉),关系型嵌入式是SQLite; 服务器性质的NoSQL服务器,如Red ...
- 传阿里整合资源,进军O2O市场
阿里巴巴对于本地生活市场,以及O2O领域始终虎视眈眈.从最早的融合口碑网,到最近阶段推出淘宝点点.收购高德地图等一系列app产品,其整合线上线下消费市场的野心已十分明显. 今年年初,阿里巴巴集团重新进 ...
- HDU 4274 Spy's Work (树 DFS)
给定N个点,每个点都有一个唯一的前驱结点(点1为大boss),每个点的实际权值是子节点的求和值.现在给出某些点的权值的估算(> , = , < ),问这些估算是否会有冲突,现在保证每个点的 ...
- [Qt] searchBox 搜索框实现
[Qt] searchBox 搜索框实现 也就是在lineEdit中加入button.在搜索框的右边会有个小小的搜索图标,输入内容之后,搜索的图标会变成叉叉. 类中的IconHelper见我的另一篇博 ...
- HDU2206 IP的计算 【经典题】
IP的计算 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- angularjs基本执行流程
近期温习了下angularjs执行流程,备记下.以便查看. 主要的执行流程例如以下: 1.用户请求应用起始页. 2.用户的浏览器向server发起一次HTTP连接,然后载入index.html页面,这 ...
- Nginx的启动脚本
vi /etc/init.d/nginx #!/bin/sh # nginx Startup script for nginx # chkconfig: - 85 15 # proces ...