zoukankan      html  css  js  c++  java
  • 关于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, "1302SERVER_PORT801316SERVER_ADDR199.170.183.42 ... "}
    {FCGI_PARAMS,          1, ""}
    {FCGI_STDIN,           1, ""}
    {FCGI_STDOUT,      1, "Content-type: text/html
    
    <html>
    <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!
    ";
    file_put_contents("/tmp/php/test.log", "test
    " ,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

     

    
    
  • 相关阅读:
    C#网页数据采集(三)HttpWebRequest
    C#获取局域网ip
    C#调用Mail发送QQ邮件
    C#操作Excel(NPOI)
    html文字两行后,就用省略号代替剩下的
    js的dom测试及实例代码
    js循环数组(总结)
    黑马vue---61、为什么vue组件的data要是一个函数
    黑马vue---59-60、组件中的data和methods
    黑马vue---31-32、vue过滤器实例
  • 原文地址:https://www.cnblogs.com/fengwei/p/3647826.html
Copyright © 2011-2022 走看看