2013-10-31 38 views
7

我目前正在編寫兩個類:HttpRequest和HttpResponse。 我想編寫我自己的HTTP類。php http請求內容原始數據enctype = multipart/form-data

我遇到了使用enctype = multipart/form-data表單的POST方法的問題:我無法獲取請求內容。

經過長時間的研究和搜索,我發現我必須使用file_get_contents("php://input")來獲取請求內容。 當我測試它時,我有一個空字符串var_dump(file_get_contents("php://input"))

我無法訪問服務器/ php配置。

我用下面的代碼測試:

<?php 
$input = file_get_contents('php://input'); 
var_dump($input); 
?> 
<html> 
<body> 
<form action="./" method="post" enctype="multipart/form-data"> 
    <label for="file">Filename:</label> 
    <input type="text" name="namen" id="nameid" /><br/> 
    <input type="file" name="file" id="file"><br> 
    <input type="file" name="file2" id="file2"><br> 
    <input type="submit" name="submit" value="Submit"> 
</form> 
</body> 
</html> 

並提交後,我有這樣的結果:string(0) ""。 很明顯,因爲php://輸入不適用於enctype =「multipart/form-data」表單。

我想有這樣的:

-----------------------------19972703421793859182225487886 
Content-Disposition: form-data; name="namen" 

ds 
-----------------------------19972703421793859182225487886 
Content-Disposition: form-data; name="file"; filename="toto.xml" 
Content-Type: text/xml 

<?xml version="1.0" encoding="UTF-8"?> 
<Toto></Toto> 

-----------------------------19972703421793859182225487886 
Content-Disposition: form-data; name="file2"; filename="" 
Content-Type: application/octet-stream 


-----------------------------19972703421793859182225487886 
Content-Disposition: form-data; name="submit" 

Submit 
-----------------------------19972703421793859182225487886-- 

是它適用於任何請求方法的方法嗎?或者我錯了?

回答

6

我正在尋找一個明顯的問題:爲什麼還要努力去解析這個問題呢?通過$ _POST []/$ _FILES []的簡單使用,數據在您的範圍之內。

您仍然可以圍繞這些值構建自己的類,而不是讓自己的類嘗試完成相同的數據數組php編譯器已經爲你做了。

爲了給你一個有效的答案:我不知道一種方法讓你的php://輸入回來,因爲它可能被PHP編譯器讀取,因此你在流的末尾(加:它是隻讀的,因此可能無法將指針重置爲流的開頭)。

+2

我只想說:我很笨。謝謝 ;) – RaphyTheGeek