我有一个pub / sub项目,我想在我的PHP项目中使用它,我的主题是设置:
我有一个php脚本来提供服务,msg.php:
$file = "text.txt";
$fp = fopen($file, "w");
fwrite($fp, json_encode($_REQUEST));// tried $_POST, $_GET
fclose($fp);
但是我无法从中获取数据,但是脚本似乎已执行(我通过txt文件的更改日期看到它)。我总是在text.txt中以 [] 结尾,如果我通过发布消息选项自动或手动发送了通知,则不会出错。 如何从传入的发布/订阅消息中获取数据?
此问题中描述的解决方案对我不起作用 Google Cloud Platform Pub/Sub push empty POST data Google Cloud Pub/Sub Push Messages - Empty POST
这就是我要替换
fwrite($fp, json_encode($_REQUEST));
与
fwrite(json_decode(file_get_contents('php://input')_);
fwrite(json_decode($HTTP_RAW_POST_DATA));
答案 0 :(得分:1)
我遇到了同样的问题,以下解决方案帮助了我。希望这对某人有帮助。
ob_start();
$rawData = file_get_contents("php://input");
echo $rawData."\n";
$JSONObj = json_decode($rawData);
/*All sensitive data comes encoded in base64 and you need to decode that string, which gives another JSON String
*/
echo base64_decode($JSONObj->message->data);
$info = ob_get_contents();
ob_end_clean();
$fp = fopen("test.txt", "w+");
fwrite($fp, $info);
fclose($fp);
答案 1 :(得分:0)
当给定一个空数组时,PHP的json_encode函数将输出该打开和关闭括号“ []”。可能会发生两种主要的可能性。
我建议使用类似以下的功能来转储所有变量和环境设置,以查看预期的数据是否完全进入PHP:
function PHPInfo2File($target_file) {
ob_start();
phpinfo();
$info = ob_get_contents();
ob_end_clean();
$fp = fopen($target_file, "w+");
fwrite($fp, $info);
fclose($fp);
}
如果PHP未接收到数据,则问题应该出在pubsub级别。