程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP獲取POST數據的幾種方法匯總

PHP獲取POST數據的幾種方法匯總

編輯:關於PHP編程

     本文給大家匯總介紹了PHP獲取POST數據的幾種常用方法,這裡分享給大家,有需要的小伙伴來參考下吧。

       

    一、PHP獲取POST數據的幾種方法

    方法1、最常見的方法是:$_POST['fieldname'];

    說明:只能接收Content-Type: application/x-www-form-urlencoded提交的數據
    解釋:也就是表單POST過來的數據

    方法2、file_get_contents("php://input");

    說明:
    允許讀取 POST 的原始數據。
    和 $HTTP_RAW_POST_DATA 比起來,它給內存帶來的壓力較小,並且不需要任何特殊的 php.ini 設置。
    php://input 不能用於 enctype="multipart/form-data"。
    解釋:
    對於未指定 Content-Type 的POST數據,則可以使用file_get_contents(“php://input”);來獲取原始數據。
    事實上,用PHP接收POST的任何數據都可以使用本方法。而不用考慮Content-Type,包括二進制文件流也可以。
    所以用方法二是最保險的方法

    方法3、$GLOBALS['HTTP_RAW_POST_DATA'];

    說明:
    總是產生 $HTTP_RAW_POST_DATA 變量包含有原始的 POST 數據。
    此變量僅在碰到未識別 MIME 類型的數據時產生。
    $HTTP_RAW_POST_DATA 對於 enctype="multipart/form-data" 表單數據不可用
    如果post過來的數據不是PHP能夠識別的,可以用 $GLOBALS['HTTP_RAW_POST_DATA']來接收,
    比如 text/xml 或者 soap 等等
    解釋:
    $GLOBALS['HTTP_RAW_POST_DATA']存放的是POST過來的原始數據。
    $_POST或$_REQUEST存放的是 PHP以key=>value的形式格式化以後的數據。
    但$GLOBALS['HTTP_RAW_POST_DATA']中是否保存POST過來的數據取決於centent-Type的設置,即POST數據時 必須顯式示指明Content-Type: application/x-www-form-urlencoded,POST的數據才會存放到 $GLOBALS['HTTP_RAW_POST_DATA']中

    二、演示

    1、PHP 如何獲取POST過來的XML數據和解析XML數據

    比如我們在開發微信企業號時,如何處理用戶回復過來的數據呢?
    文檔:http://qydev.weixin.qq.com/wiki/index.php?title=%E6%8E%A5%E6%94%B6%E6%99%AE%E9%80%9A%E6%B6%88%E6%81%AF
    首先查閱文檔,可知道:啟用開發模式後,當用戶給應用回復信息時,微信服務端會POST一串XML數據到已驗證的回調URL

    假設該URL為 http://www.xxx.com
    Http請求方式: POST
    http://www.xxx.com/?msg_signature=ASDFQWEXZCVAQFASDFASDFSS×tamp=13500001234&nonce=123412323

    POST的XML內容為:

     

    代碼如下:
    <xml>
    <ToUserName><![CDATA[toUser]]></ToUserName>
    <FromUserName><![CDATA[fromUser]]></FromUserName>
    <CreateTime>1348831860</CreateTime>
    <MsgType><![CDATA[text]]></MsgType>
    <Content><![CDATA[this is a test]]></Content>
    <MsgId>1234567890123456</MsgId>
    <AgentID>1</AgentID>
    </xml>

     

    那麼怎麼接收這段內容呃?
    這時就可以用到:方法2(file_get_contents("php://input"))、方法3($GLOBALS['HTTP_RAW_POST_DATA'])

    方法2(file_get_contents("php://input")):

     

    代碼如下:
    $input = file_get_contents("php://input"); //接收POST數據
    $xml = simplexml_load_string($input); //提取POST數據為simplexml對象
    var_dump($xml);

     

    方法3($GLOBALS['HTTP_RAW_POST_DATA'])

     

    代碼如下:
    $input = $GLOBALS['HTTP_RAW_POST_DATA'];
    libxml_disable_entity_loader(true);
    $xml = simplexml_load_string($input, 'SimpleXMLElement', LIBXML_NOCDATA);
    var_dump($xml);
    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved