2013-10-31 37 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