如何在服务器端访问PHP REST API PUT数据?

时间:2011-07-24 07:44:41

标签: php rest server-side put

- 问题 -

我刚刚开始使用REST API,我感到非常困惑。

这就是我的PHP cRUL客户端对于PUT的看法。

case 'PUT':
    curl_setopt($handle, CURLOPT_CUSTOMREQUEST, 'PUT');
    curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
    break;

现在,当我查看服务器时,我的$ _SERVER ['REQUEST_METHOD']显示了PUT,但我的问题是如何获取我使用CURLOPT_POSTFIELDS发送的$数据。

我需要做的就是将带有PUT请求的$ data发送到下一行。像

$value = $data['curl_data'];

我在这个话题上看到了这么多杂乱,这让我很头疼。在php客户端方面似乎很容易,但是没有人能够为php服务器端提供答案。

感谢您的帮助!

- 回答(在帮助和家庭作业后) -

我是新人,所以直到8小时后才能回答我自己的问题...奇怪:)

好的,在与这里的优秀人士合作之后,我不得不说我们遇到了答案。我很自豪,因为它很容易,同时令人困惑。

curl_setopt($handle, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($handle, CURLOPT_POSTFIELDS, http_build_query($data));

第一个更改(上面)我必须在$ data周围添加http_build_query()。这将我的数据从一个数组转换为url友好字符串。

接下来我不得不补充一下。

parse_str(file_get_contents('php://input'), $put);

现在我可以像$ put ['data']那样做。

PaulPRO上面给出的答案确实能够以更少的行来获得与file_get_contents()相同的数据。我们陷入困境,试图弄清楚如何解析我在其他网站上看到的缺少http_build_query()的数据。

所以这就是它的运作方式。

  1. 将数据放入正常数组中。
  2. http_build_query()将它转换为一个很好的GET类似字符串。
  3. file_get_contents()将其从客户端传输到服务器。
  4. parse_str()然后将其转回数组。
  5. 我看到很多关于使用PUT发送文件的消息。我可以看到这是如何工作的,但是从我在整个REST过程中读到的内容来看,PUT是更新数据,因为post是创建数据。也许我弄错了。我错过了什么吗?

3 个答案:

答案 0 :(得分:8)

来自PHP Manual

PUT数据来自stdin:

$putdatafp = fopen("php://input", "r");

使用示例:

$putfp = fopen('php://input', 'r');
$putdata = '';
while($data = fread($putfp, 1024))
    $putdata .= $data;
fclose($putfp);

答案 1 :(得分:5)

我的情况相同,必须使用PUT方法通过ReST API将数据发送到PHP Server。我几乎花了几个小时才找到解决方案,但终于找到了方法:

在CUrl中:

$postData = http_build_query($data);
curl_setopt($ch, CURLOPT_POSTFIELDS,$postData); 

我们要将数据解析为变量,例如:$ putData,     这里是Parse String过程:

parse_str(file_get_contents("php://input"),$putData); 

然后打印$putData,将获得您在卷曲中发布的相同数组..

答案 2 :(得分:1)

如果要获取键值为$ _POST之类的表单数据。

module categorical1 (A : Set) where

... 

isSubFormula : tSymb → tSymb → Set

decSubFormula : Decidable (_≡_ {A = A}) → Decidable isSubFormula
decSubFormula _≟A_ = ? -- You can use _≟A_ here to decide equality of A values

例如 rest-api.php

function PUT($key){
    $inputFileSrc = 'php://input';
    $lines = file($inputFileSrc);

    foreach($lines as $i =>  $line){
        $search = 'Content-Disposition: form-data; name="'.$key.'"';
        if(strpos($line, $search) !== false){
            return trim($lines[$i+2]);
        }
    }
}