首页 > 解决方案 > 如何将 POST 请求的完整正文记录到文件中以进行调试?

问题描述

我已经阅读了这个问题的许多“可能重复”,并在这篇文章中使用了其中一个的代码,但我似乎无法确切地看到这个问题在问什么。

作为与 PHP 或网站无关的更大项目的一部分,我需要获取对我的共享服务器的 POST 请求的主体。按照这个 SO post的想法,我在服务器的 www 文件夹中创建了一个 php 文件,其中包含以下内容

网络钩子.php

<?php 
error_log("webhook running");
file_put_contents("post.log", print_r($_POST, true));
?>

然后,我使用第三方公司向我的服务器上的该脚本发布了一条测试消息,该脚本收到了 200 响应。

该帖子的正文包含

Body
{
  "events": [
    {
      "id": "EVTESTDCQAHTYRDYM72",
      "created_at": "2021-01-04T12:17:41.536Z",
      "resource_type": "payments",
      "action": "paid_out",
      "links": {
        "payment": "index_ID_1234567"
      },
      "details": {
        "origin": "mycompanys",
        "cause": "payment_paid_out",
        "description": "The payment has been paid out by mycompany."
      },
      "metadata": {}
    }
  ]
}

但我服务器上的日志文件只包含

Array
(
)

我不是 PHP 程序员(只需完成我需要完成的工作即可)出于调试和开发目的,我应该如何更改我的 webhook.php 脚本,以便我可以看到发送的所有数据?

如果我能做到这一点,那么我可能会弄清楚如何对每个元素进行正确处理,而这些元素并不总是具有上述结构。

标签: phpdebuggingpost

解决方案


PHP 仅在请求 Content-Type 为application/x-www-form-urlencoded或时填充 $_POST multipart/form-data。如果您发送其他任何内容,那么您必须使用php://input来读取原始 POST 正文,并自己解析它。

您显示的示例 JSON 似乎是有效的 - 所以如果 json_decode 在这里没有给您预期的结果,那么您的输入数据可能不是您最初期望的。

这里的一个基本调试错误是您只查看多个“复合”操作的最终结果。首先记录file_get_contents('php://input')返回的内容,看看这是否真的是您所期望的。如果不是一开始,那么只查看 json_decode 返回的内容并没有帮助。


推荐阅读