2011-11-09 90 views
0

我有一个curl请求,它应该向我的web服务器上的PHP文件发送一个PUT请求。当我收到这个请求时,我想列出使用此PUT请求收到的所有POST数据,但是没有收到POST数据。请你能告诉我哪里出错了吗?在cURL的另一端没有收到POST数据请求

$ch = curl_init(); 
$fields = array(
     'username' => 'username' 
); 
curl_setopt($ch, CURLOPT_URL, "http://localhost/linetime/user/1"); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

$result = curl_exec($ch); 
var_dump($result); 

回答

5

PUT请求发送的数据是无法通过$_POST

看看$_SERVER['CONTENT_TYPE']告诉你什么。它的multipart/form-data通常具有类似于MIME邮件的边界。您可以使用输入流中读取的数据PUT

$putData = ''; 
$fp = fopen('php://input', 'r'); 
while (!feof($fp)) { 
    $s = fread($fp, 64); 
    $putData .= $s; 
} 
fclose($fp); 

在你的情况,现在$putData应该包含这样的内容:

------------------------------e85bfe7e43b5 
Content-Disposition: form-data; name="username" 

username 
------------------------------e85bfe7e43b5-- 

现在,所有你需要的是分析一个使用该数据用于MIME处理的许多免费可用的PEAR包。

+0

为了方便访问输入流,还可以使用'$ input = file_get_contents(“php:// input”);'。 – Repox