關於php-fpm通信時沒有REQUEST_METHOD的問題

nginx是經過fastcgi協議來和php通信的!而php-fpm就扮演了這樣的角色php

fastcgi協議 中文版http://blog.chinaunix.net/uid-380521-id-2412484.htmlhtml

英文版 http://www.fastcgi.com/drupal/node/6node

 

fastcgi通信的順序nginx

大概是這樣web

{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傳輸數據是的一些標誌dom

#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通信!,php-fpm

若是在FCGI_PARAMS值傳入下面參數,出現了一個很奇怪的問題
char name[] = "SCRIPT_FILENAME"; //讓具體腳本執行
char value[] = "/var/www/f.php";

/var/www/f.php的代碼ui

<?php
echo "Hollo World!\n";
file_put_contents("/tmp/php/test.log", "test\n" ,FILE_APPEND);

結果:test.log 沒有寫入數據,可是返回以下數據spa

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用來表示請求的協議

 一個很奇怪的問題出現了.net

   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
相關文章
相關標籤/搜索