簡體   English   中英

PHP如何讀取HTTP Raw Post數據

[英]PHP How read HTTP Raw Post Data

遠程服務器定期通過HTTP HEAD查詢到我的php頁面(只檢查KeepAlive,這有效)。 如果遠程服務器注冊了一個觸發器,請向我發送帶有數據的xml格式(采用后期原始格式)。 我無法找到錯誤或信息的位置如何讀取輸入數據。

我試試這個(沒有錯誤顯示),但結果是空的。

ini_set('always_populate_raw_post_data', 'On');

$data1 = file_get_contents('php://input');
//var_dump($data1); //NULL
fwrite($fp, 'php://input: '.serialize($data1)."\n");

$data2 = $GLOBALS['HTTP_RAW_POST_DATA'];
//var_dump($data2); //NULL
fwrite($fp, 'GLOBALS HTTP_RAW_POST_DATA: '.serialize($data2)."\n");

$data3 = $HTTP_RAW_POST_DATA;
//var_dump($data3); //NULL
fwrite($fp, 'HTTP_RAW_POST_DATA: '.serialize($data3)."\n");

//print_r($_POST); //NULL
fwrite($fp, 'POST: '.serialize($_POST)."\n");


$dataPOST = trim(file_get_contents('php://input'));
$xmlData = simplexml_load_string($dataPOST);
fwrite($fp, 'BETA: '.$xmlData."\n");

結果在日志文件中:

HeadRequest at 2015-01-21 23:35:47
======================================================
php://input: s:0:"";
GLOBALS HTTP_RAW_POST_DATA: N;
HTTP_RAW_POST_DATA: N;
POST: a:0:{}
BETA: 

關於服務器:PHP版本是5.5.9,服務器在Linux上運行(Apache / 2.4.7(Ubuntu)

謝謝你,最誠摯的問候,彼得

得到它並提供更復雜的解決方案。

結果(工作代碼):

<?php
// validate read-only stream for read raw data from the request body
if(file_get_contents('php://input')=='')
{
    // THROW EXCEPTION
}
else
{   
    // get read-only stream for read raw data from the request body
    $strRequest = file_get_contents('php://input'); 

    // import request to xml structure
    $DOMDocumentRequest = new DOMDocument;
    $DOMDocumentRequest->loadXML($strRequest);        
}
?>

關於問題:

  • 如果我在LAMP(Ubuntu 14.04 LTS)上運行代碼,則不起作用
  • 如果我在LAMP(Ubuntu 14.04 LTS)上運行代碼並使用Pcap安裝WireShark,服務器崩潰 - 我必須重新安裝Apache2
  • 如果我在WAMP(帶有XAMPP的MS Windows Server 2008R2 x64)上運行代碼,那么alll是對的

最好的問候,彼得

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM