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

标签 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 发送的 $data。

我需要做的就是将通过 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() 然后将其转回数组。

我看到很多有关使用 PUT 发送文件的消息。我可以看到这是如何工作的,但从我在整个 REST 过程中读到的内容来看,PUT 是更新数据,就像 post 是创建数据一样。也许我错了。我错过了什么吗?

最佳答案

来自PHP Manual :

PUT 数据来自标准输入:

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

使用示例:

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

关于php - 如何在服务器端访问 PHP REST API PUT 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46063358/

相关文章:

php - 使用 PDO 获取行和计数

php - 我如何使用浏览直接 URL 执行 Cron 作业

rest - 将 REST 请求与异步服务器中的响应相匹配

web-services - 我可以使用 Redmine REST API 搜索问题(通配符)吗?

php - 利用 cURL header 问题的 REST-ful 连接

php - 如何使用 PHP 将 "sanitize"图像上传并转换为 PNG?

php - DataTables服务器端处理,在具有两个变量的列中生成链接

php - (php) 我们应该为基于 Redis 的 session 处理使用垃圾收集器吗?

php - iOS 应用程序中的 HTTPS Web 服务

javascript - 客户端和服务器端编程有什么区别?