PHP从pubsub获取数据

时间:2018-11-25 19:49:34

标签: php google-cloud-pubsub

我有一个pub / sub项目,我想在我的PHP项目中使用它,我的主题是设置:enter image description here

我有一个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));

2 个答案:

答案 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函数将输出该打开和关闭括号“ []”。可能会发生两种主要的可能性。

  1. 可能是从pubsub向您的端点发送了一个空数组。
  2. 取决于您的PHP版本和配置,请求内容可能不会通过$ _REQUEST,$ _ POST或$ HTTP_RAW_POST_DATA变量来传递。

我建议使用类似以下的功能来转储所有变量和环境设置,以查看预期的数据是否完全进入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级别。