• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

关于php-fpm通讯时没有REQUEST_METHOD的问题

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

 

 

 
                    
            
                

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
linuxchattr命令与php的配置文件.user.ini发布时间:2022-07-10
下一篇:
PHP5.3里面数组的的实现方式发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap