如何将POST请求的全文记录到文件中进行调试



我读过很多这个问题的"可能重复",并在本文中使用了其中一个问题的代码,但我似乎看不出这个问题到底在问什么

作为与PHP或网站无关的更大项目的一部分,我需要获得到共享服务器的POST请求的主体。根据这篇SO文章的想法,我在服务器上的www文件夹中制作了一个php文件,其中包含以下

webhook.php

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

然后,我使用第三方公司将测试消息POST到我的服务器上的脚本中,收到了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脚本,以便查看发送的所有数据?

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

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

您所展示的示例JSON似乎是有效的,因此,如果JSON_decode在这里没有给您预期的结果,那么您的输入数据可能不是您最初预期的结果。

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

最新更新