[PHP]不同作業系統下PHP接收POST資料問題 (轉)
不同操作下
接收HTTP POST資料問題
:namespace prefix = o ns = "urn:schemas--com::office" />
版本
建立時間
建立人
備註
1.0.0606.1
-6-6
鄭 昀
第一稿
pe:
本文件將說明PHP頁面接收HTTPPOST的資料問題。一般來說,POST過來的二進位制資料流,只需要PHP用$HTTP_RAW_POST_DATA就可以接收。但是,我們遇到的情況卻不是這樣。
繼續閱讀之前,我們假設您熟悉以下知識:
n PHP
n MSXML2.Server
n HTTP POST
現象
我們遇到了這麼一個問題:
我從 2000上,利用MSXML2.ServerXMLHTTP介面向 Apche下的PHP頁面POST二進位制資料流。
PHP頁面的$HTTP_RAW_POST_DATA變數為空,得不到資料,而且sizeof($_POST)的值也是0。
但是,如果我同樣向一個 IIS下的PHP頁面POST資料,卻可以用$HTTP_RAW_POST_DATA接收到正常資料。
為什麼二者有這種區別呢?
環境資訊
發起HTTP POST請求方·系統環境
Professional(Service Pack 1)
MSXML3.Dll(SP3 / 版本號:8.30.9926.0)
ServerXMLHTTP的程式碼是:
MSXML2::IServerPtr pIXMLHttpRequest = NULL;
HRESULT hr = pIXMLHttpRequest.CreateInstance("MSXML2.ServerXMLHTTP");
hr = pIXMLHttpRequest->open(L"POST",
bstrPHPURL,
VARIANT_FALSE, // 同步傳送
vtMissing,
vtMissing);
hr = pIXMLHttpRequest->send(varData);
正確接收POST請求的PHP for MS Windows·系統環境
用$HTTP_RAW_POST_DATA正常接收了資料的PHP for Windows資訊:
PHP Version 4.2.2
System
5.1 build 2600
Server
CGI
關於使用這個全域性變數的相關設定:
Directive
Local Value
Master Value
always_populate_raw_post_data
0
0
無法接收POST請求的PHP for Linux·系統環境
無法用$HTTP_RAW_POST_DATA接收POST資料的PHP for Linux安裝資訊:
PHP Version 4.3.2RC3
System
Linux atm2 2.4.18-1 #1 Wed May 29 10:45:23 CST 2002 i686
Server API
Registered PHP Streams
php, http,
關於使用這個全域性變數的相關設定:
Directive
Local Value
Master Value
always_populate_raw_post_data
On
On
更多資訊
照理說,只要php.ini中定義了
; Always populate the $HTTP_RAW_POST_DATA variable.
always_populate_raw_post_data = On
就完全可以用$HTTP_RAW_POST_DATA變數來接收資料。
起碼$_POST變數是可以測算出POST到頁面的資料大小的。
我確實看到有幾個人試圖報告“Empty $HTTP_RAW_POST_DATA”是一個PHP的,但是PHP維護人員說肯定不是。
解決步驟
不知道Windows下的PHP 4.2.2怎麼一直可以接收。
但是如果我顯式宣告Content-Type為file的話,Linux下的PHP 4.3.2RC3就可以正常接收POST資料了。
設定頭資訊的程式碼如下:
hr = pIXMLHttpRequest->setRequestHeader(
_bstr_t("Content-Type"),
_bstr_t("file"));
這樣做的話,PHP 4.2.2 for Windows和PHP 4.3.2RC3 for Linux都可以用$HTTP_RAW_POST_DATA接收,沒有問題。
總結:
如果你的$HTTP_RAW_POST_DATA不在那兒了,你可以在呼叫HTTP元件傳送HTTP POST請求時,指定Content-Type為file。
Disclaimers:
本文件所包含的資訊代表了在釋出之日,zhengyun對所討論問題的當前看法。本文件不應理解為zhengyun一方的承諾,zhengyun不保證所給資訊在釋出之日以後的準確性。
本文件僅供參考。
必須遵守所有適用的版權法。在不對版權法所規定的權利加以限制的情況下,如未得到 zhengyun和CSDN明確的書面許可,不得出於任何目的、以任何形式或手段(電子的、機械的、影印、錄製等等)複製、傳播本文的任何部分,也不得將其或引入到檢索系統中。
Thank wyp;
Written by zhengyun (at) tomosoft.com
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-958665/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PHP傳送和接收POST資料PHP
- 解決PHP Post獲取不到非表單資料的問題PHP
- 關於 PHP 不同資料型別在比較時該如何轉化問題PHP資料型別
- 五個常見 PHP 資料庫問題(轉)PHP資料庫
- PHP快速獲取作業系統型別PHP作業系統型別
- UNIX下收集作業系統統計資料作業系統
- linux作業系統下建立mysql映象資料庫(轉)Linux作業系統MySql資料庫
- 統信作業系統下資料庫管理利器作業系統資料庫
- PHP獲取POST資料的3種方法PHP
- 不同作業系統上遮蔽oracle的作業系統認證方式作業系統Oracle
- 面試資料-作業系統面試作業系統
- Elementary OS 作業系統:PHP 開發環境配置 (一)作業系統PHP開發環境
- .net接收post請求並把資料轉為字典格式
- java 解析php序列化資料問題JavaPHP
- 五個常見 PHP 資料庫問題PHP資料庫
- 同步整合不同系統、不同資料庫中資料的問題資料庫
- 作業系統2—作業系統概論(下)作業系統
- 玩轉 PHP 網路程式設計全套之資料接收與傳送PHP程式設計
- php問題PHP
- PHP 傳送GET 和 POST資料的方法分析PHP
- PHP問題總結:PHP最佳化及高效提速問題小結(轉)PHP
- Mac 下切換 PHP 版本問題MacPHP
- 使用interface化解一場因作業系統不同導致的編譯問題作業系統編譯
- PHP中include()的使用問題 (轉)PHP
- BREW常見問題解答(FAQ 4)-語言和作業系統 (轉)作業系統
- Mac下安裝PHP遇到的問題MacPHP
- $_POST,$HTTP_RAW_POST_DATA,php://inputHTTPPHP
- 作業系統統計資料分類作業系統
- 紅旗Linux作業系統下載(轉)Linux作業系統
- java Socket接收資料亂碼問題Java
- PHP新用法,PHP執行系統外部命令篇(轉)PHP
- 作業系統列表(轉)作業系統
- 作業系統面試題作業系統面試題
- PHP文字資料表類 (轉)PHP
- 【OSX】OSX下采用MAMP的PHP替換系統自帶PHPPHP
- 三種方法教你如何用PHP模擬post提交資料PHP
- 各作業系統下php.ini檔案的位置在哪裡作業系統PHP
- IIS下配置PHP遇到Service Unavailable問題PHPAI