在一陣絕望的,我沒有在shell下:
REDIRECT_STATUS=true
SCRIPT_FILENAME=/var/www/...
REQUEST_METHOD=POST
GATEWAY_INTERFACE=CGI/1.1
export REDIRECT_STATUS
export SCRIPT_FILENAME
export REQUEST_METHOD
export GATEWAY_INTERFACE
echo "test=1" | php-cgi
...仍然沒有$_POST
變量顯示的這個輸出高達:
<?php var_dump($_POST); ?>
我試圖創建一個小的Web服務器,與接口二進制。然而,事情並不怎麼樣。 php-cgi
二進制文件正確處理GET請求。當涉及POST請求時,即使事情正在發佈,$_POST
數組也是空的。
我檢查HTTP頭被送入php-cgi
二進制,他們確實也包括POST數據和Content-type: application/x-www-form-urlencoded
頭。
什麼可以保持php-cgi
二進制文件看到請求中包含POST數據?
我在進步,我已經挖了從PHP source code一些東西:
-
468: static int sapi_cgi_read_post(char *buffer, uint count_bytes TSRMLS_DC)
(我不知道在哪裏這個功能是從調用)
閱讀下面的答案後,我想:
<?php
var_dump($HTTP_RAW_POST_DATA);
?>
...其產生的輸出:
NULL
...表示更奇怪的東西在這裏工作。
我越來越近......我在/main/php_content_types.c發現這個功能:
SAPI_API SAPI_POST_READER_FUNC(php_default_post_reader)
...這似乎是代碼處理POST請求。
選擇PHP源代碼的時間:P – 2010-10-27 05:17:45
我沒有答案,但POST數據應該通過stdin進入。 – 2010-10-27 05:18:01
您的Web服務器是否正確實施了CGI 1.1規範? – joschi 2010-10-27 06:22:18