2013-02-11 70 views
-1

所以我一直在爲此苦苦掙扎了兩天,並沒有取得很大的成功。php的聆聽者頁面

我得到的是一個http POST,它被髮送到正在我的服務器上創建的php文件的網頁。所以基本上我試圖創建一個PHP監聽器腳本,當發生http發佈時,它將運行腳本將xml數據保存到SimpleXMLElement中,以便我可以編寫MYSQL查詢將數據導入到我們的數據庫中。一旦我將數據獲取到SimpleXMLElement中,我可以從那裏接管,我遇到的問題是我無法獲取listener.php文件來偵聽HTTP POST並將數據讀取到本地文件中。

<?php 
public void RunServer() 
{ 
    var prefix = "http://*:4333/"; 
    HttpListener listener = new HttpListener(); 
listener.Prefixes.Add(prefix); 
try 
{ 
    listener.Start(); 
} 
catch (HttpListenerException hlex) 
{ 
    return; 
} 
while (listener.IsListening) 
{ 
    var context = listener.GetContext(); 
    ProcessRequest(context); 
} 
listener.Close(); 
} 

private void ProcessRequest(HttpListenerContext context) 
{ 
// Get the data from the HTTP stream 
var body = new StreamReader(context.Request.InputStream).ReadToEnd(); 
$data = body 
byte[] b = Encoding.UTF8.GetBytes("ACK"); 
context.Response.StatusCode = 200; 
context.Response.KeepAlive = false; 
context.Response.ContentLength64 = b.Length; 

var output = context.Response.OutputStream; 
output.Write(b, 0, b.Length); 
context.Response.Close(); 
} 
?> 

這段代碼是我已經得到最接近我需要什麼,我得到一個500錯誤,當我嘗試訪問的頁面。我不會說謊我對PHP很陌生,在理解函數定義時遇到了問題。 (也是我從一個已關閉的StackOverflow票證中得到了這段代碼)

我目前在我的服務器上使用php5和apache作爲我的虛擬主機。 ] 我有一個php.info()文件設置,可以發佈它,如果需要的話。

+1

的代碼是不是PHP。當您嘗試通過php解析器運行它時,它將會失敗並顯示「致命錯誤」。你可能會看到500錯誤,因爲你的服務器隱藏了你的php錯誤。 – Yoshi 2013-02-11 16:51:10

+0

我有一種輕微的感覺,即將發生這種情況,因爲變量聲明與我以前見過的變量聲明不同。 I.E.當我在php中編寫我的sql腳本時,但我不確定。有沒有辦法做到這一點在PHP中,你會推薦? – choppyfireballs 2013-02-11 17:00:13

+0

您的代碼似乎是PHP,JavaScript和某些C變體的混搭。什麼StackOverflow問題做這個代碼來自? – Barmar 2013-02-11 17:05:16

回答

1

如果你想將數據保存到一個SimpleXMLElement,將做到這一點:

<?php 
$xml = new SimpleXMLElement($_POST['xml-value-field']); 
//insert into mysql db... 
//write to local file... 
?> 
+0

感謝@GarekhL我能夠嘗試這種方法無濟於事,我運行了代碼'$ xml = file_get_contents(php:// input),而不是獲取xml數據,我看到了這樣的東西。 %3D%22AltCustID%22 + CustomerPO%3D%22PO12345%22%3E%0D 0A%09%++%3CPayment +方法%3D%22invoice%22 – choppyfireballs 2013-02-11 18:16:02