**對比$_POST、$GLOBALS['HTTP_RAW_POST_DATA']和file_get_contents('php://input')
最近在開發微信介面,又學到了一些新的技術點,今天就把學到的關於接收資料的技術點給簡單的羅列下。
- public function __construct($token, $wxuser = “){
- $this -> auth($token, $wxuser) || exit;
- if(IS_GET){
- echo($_GET[`echostr`]);
- exit;
- }else{
- $xml = file_get_contents(“php://input”);
- $xml = new SimpleXMLElement($xml);
- $xml || exit;
- foreach ($xml as $key => $value){
- $this -> data[$key] = strval($value);
- }
- }
- }
上述程式碼是擷取的一個片段,意思為把接收到的微信傳過來的xml解析為陣列。其中有一處file_get_contents(`php://input`),後經查證,微信給開發者賬號填寫的url傳送的是xml資料,但PHP預設只識別application/x-www.form-urlencoded標準的資料型別,對text/xml的內容無法解析為$_POST陣列,因此會保留原型,可以交給file_get_contents(‘php://input’)接收,也可以用$GLOBALS[`HTTP_RAW_POST_DATA`]。
如,傳過來的xml為
- <xml>
- <ToUserName><![CDATA[ebyben1413005325]]></ToUserName>
- <FromUserName><![CDATA[ga_6281708af4c6]]></FromUserName>
- <CreateTime>1413341614</CreateTime>
- <MsgType><![CDATA[text]]></MsgType>
- <Content><![CDATA[首頁]]></Content>
- <MsgId>1234567890123456</MsgId>
解析過後為
- Array
- (
- [ToUserName] => ebyben1413005325
- [FromUserName] => ga_6281708af4c6
- [CreateTime] => 1413341614
- [MsgType] => text
- [Content] => 首頁
- [MsgId] => 1234567890123456
- )
php://input 允許讀取 POST 的原始資料。和$GLOBALS[`HTTP_RAW_POST_DATA`] 比起來,它給記憶體帶來的壓力較小,並且不需要任何特殊的 php.ini 設定。同時兩者皆不能用於接收enctype=”multipart/form-data”形式的資料。
最後再說下$_SERVER[`REQUEST_METHOD`]這個變數,用過ThinkPHP的朋友應該在程式碼中使用類似IS_GET、IS_AJAX這種程式碼吧,追溯下原始碼,就可以看到
- define(`REQUEST_METHOD`,$_SERVER[`REQUEST_METHOD`]);
- define(`IS_GET`, REQUEST_METHOD ==`GET` ? true : false);
- define(`IS_POST`, REQUEST_METHOD ==`POST` ? true : false);
- define(`IS_PUT`, REQUEST_METHOD ==`PUT` ? true : false);
- define(`IS_DELETE`, REQUEST_METHOD ==`DELETE` ? true : false);
- define(`IS_AJAX`, ((isset($_SERVER[`HTTP_X_REQUESTED_WITH`]) && strtolower($_SERVER[`HTTP_X_REQUESTED_WITH`]) == `xmlhttprequest`) || !empty($_POST[C(`VAR_AJAX_SUBMIT`)]) || !empty($_GET[C(`VAR_AJAX_SUBMIT`)])) ? true : false);
原來僅僅就用了這個變數,就達到效果。
如何聯絡我:【萬里虎】www.bravetiger.cn
【QQ】3396726884 (諮詢問題100元起,幫助解決問題500元起)
【部落格】http://www.cnblogs.com/kenshinobiy/
相關文章
- $_POST,$HTTP_RAW_POST_DATA,php://inputHTTPPHP
- $GLOBALS['HTTP_RAW_POST_DATA']和$_POST的區別HTTP
- $POST 、$HTTP_RAW_POST_DATA、php://input三者之間的區別HTTPPHP
- 一文搞懂 $_POST 和 file_get_contents ("PHP://input") 的區別PHP
- undefinedindex:HTTP_RAW_POST_DATAUndefinedIndexHTTP
- PHP載入大檔案時require和file_get_contents的效能對比PHPUI
- PHP file_get_contents 與 curl 效能比較PHP
- 深入剖析PHP輸入流php://input(與POST/GET的區別)PHP
- HTTP方法_GET 對比 POSTHTTP
- file_get_contents傳送post請求
- php和linux中的正則對比PHPLinux
- PHP傳送和接收POST資料PHP
- PHP傳送POST和GET請求PHP
- Node.js和PHP執行機制對比Node.jsPHP
- PHP學習:PHP超全域性變數(Superglobal)$GLOBALS的介紹以及和global的區別PHP變數
- file_get_contents與curl的比較
- PHP 規範程式設計 register_globals 配置項PHP程式設計
- PHP 5 與 PHP 7 的效能對比PHP
- PHP7.2、PHP7.1效能對比PHP
- file_get_contents和fsockopen
- node 使用get和post向後臺請求資料的使用方式對比
- PHP 和 Node.js 的10項對比挑戰PHPNode.js
- 常用PHP框架功能對比表PHP框架
- 深入理解PHP之isset和array_key_exists對比PHP
- $(":input")和$("input")區別
- PHP 傳送GET 和 POST資料的方法分析PHP
- cURL實現傳送Get和Post請求(PHP)PHP
- PHP中使用cURL實現Get和Post請求PHP
- Java和PHP在Web開發方面的八大對比JavaPHPWeb
- 如何讓input文字框和圖片對齊
- WinRunner和QTP對比QT
- 對比Javascript和TypeScriptJavaScriptTypeScript
- redux 和 mobX對比Redux
- Django 和 struts 對比Django
- Mongo和Couch對比Go
- vite和webpack對比ViteWeb
- TCP和UDP對比TCPUDP
- golang for range 遍歷 對比 PHP、pythonGolangPHPPython