- 问题 -
我刚开始使用 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 发送的 $data。
我需要做的就是将 $data 与 PUT 请求一起发送到下一行。喜欢
$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() 的缺乏发挥作用的地方。
所以这就是一切的运作方式。
- 数据被放入一个普通的数组中。
- http_build_query() 将它转换成一个漂亮的几乎像 GET 的字符串。
- file_get_contents() 将其从客户端传输到服务器。
- parse_str() 然后将其转换回数组。
我看到很多关于使用 PUT 发送文件的消息。我可以看到这是如何工作的,但从我在整个 REST 过程中读到的内容来看,PUT 是更新数据,就像 post 是创建数据一样。也许我错了。我错过了什么吗?