【问题标题】:I am sending raw JSON data through postman to a PHP function (PUT method). file_get_contents('php://input') gives null我通过邮递员将原始 JSON 数据发送到 PHP 函数(PUT 方法)。 file_get_contents('php://input') 给出 null
【发布时间】:2021-06-02 00:48:52
【问题描述】:

我试图获取通过$_POST = json_decode(file_get_contents('php://input')); 传递的原始数据,但file_get_contents('php://input') 给出了一个空字符串(而不是我传递的原始数据)

如果有帮助,请提供更多信息:

  • allow_url_fopen 在 php.ini 中开启
  • 我正在使用PUT方法发送数据
  • 内容类型为application/json

Postman 1 Postman 2

【问题讨论】:

  • 你究竟是如何通过邮递员将此json 数据发送到 php 脚本/函数的?
  • 很抱歉,我无法理解您的意思。如果这有帮助,数据是 {"name":"some name", "email":"some email"}
  • 我的意思是,你在调用任何 api 吗?你能分享带有标题的邮递员屏幕截图吗?这是你提交PUT请求的那个api的代码吗?
  • 是的,这是我调用API时访问的代码,我会在问题中附上截图
  • 您是否在后端使用任何 php 框架?另外,能否分享.htaccess如果正在使用)和生产的apache配置文件

标签: php api postman file-get-contents put


【解决方案1】:

我尝试重现您的问题,但对我来说效果很好。

1/ 我的 php 文件:<?php $_POST = json_decode(file_get_contents('php://input')); print_r($_POST); ?>

2/ 邮递员请求和响应(PUT 方法) Postman request and response

尝试使用 postman 进行测试,如果它正常工作,请检查您将数据发送到脚本的方式。

【讨论】:

  • 更新:它适用于开发而不是生产。一切都一样,我累了。另外,我尝试将方法更改为 POST,它也适用于 prod。它只是不适用于 PUT in prod。
【解决方案2】:
  1. 不要覆盖$_POST 变量,这是一种不好的做法。
  2. 设置内容类型标头是不够的。您必须正确编码和发送数据。在邮递员中,您应该像这样发送它:

确保将正文类型设置为 raw,并发送有效的 JSON。

【讨论】:

  • 是的,我就是这样做的。另外,我才知道它在 dev 中运行良好,而不是在 prod 中运行良好,所有代码都是一样的!此外,在产品中,它适用于 POST 方法虽然
  • @HetalMangukia 然后您应该查看您的服务器配置(Nginx / Apache)并确保启用了 PUT 方法。
  • 这听起来像是个问题。不幸的是,我不知道如何查看 PUT 方法是否启用,如果禁用,如何启用它。你能帮我解决这个问题吗?
  • 刚刚检查并启用了PUT方法!
猜你喜欢
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 2016-12-27
  • 2016-08-29
  • 2019-01-30
  • 1970-01-01
相关资源
最近更新 更多