Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php GitHub WebHook帖子未通过_Php_Post_Github_Git Post Receive - Fatal编程技术网

Php GitHub WebHook帖子未通过

Php GitHub WebHook帖子未通过,php,post,github,git-post-receive,Php,Post,Github,Git Post Receive,我已经设置了github webhoooks,以便在推送回购时向服务器上的PHP脚本发送帖子。() 我的PHP脚本记录连接IP以及收到的负载: $date = strftime('%c'); file_put_contents('log.txt', PHP_EOL.trim($date).PHP_EOL, FILE_APPEND); try { $payload = json_decode($_REQUEST['payload']); } catch(Exception $e) { ex

我已经设置了github webhoooks,以便在推送回购时向服务器上的PHP脚本发送帖子。()

我的PHP脚本记录连接IP以及收到的负载:

$date = strftime('%c');
file_put_contents('log.txt', PHP_EOL.trim($date).PHP_EOL, FILE_APPEND);
try
{
  $payload = json_decode($_REQUEST['payload']);
}
catch(Exception $e)
{
  exit(0);
}

//LOG THE POST REQUEST
file_put_contents('log.txt', print_r($payload, TRUE), FILE_APPEND);

//EXECUTE A SCRIPT WHEN THE POST REQUEST IS INITIALIZED
if ($payload->ref === 'refs/heads/master')
{
  exec('deploy.sh >> log.txt');
}
从日志中,我可以看到,当我推送到我的回购协议时,IP连接,但没有记录POST数据。我使用RequestBin进行了测试,并确认存在POST数据。此外,如果我在URL中手动输入一个$\u GET payload变量,则会记录该变量(因为我检查的是$\u请求,而不仅仅是$\u POST)。我怀疑我的PHP服务器被配置为拒绝来自其他服务器的POST请求。我使用的是1和1共享主机,所以我没有专用的控件,但我可以使用SSH,也可以使用.ini文件在本地配置PHP设置。如有任何建议,将不胜感激

*我不在乎我是用PHP还是其他语言来做这件事。如果您认为使用Python或其他工具会更容易,那也很酷


-Jeremy

好的,在进行JSON解码之前,我先打印原始的post数据,然后我就知道了。事实证明,我的PHP安装启用了magic quotes,并自动将转义斜杠放在JSON负载中的每个引号之前。显然,这使得JSON无效,结果JSON_解码出错

以下是简单的修复方法:

$payload = json_decode(stripslashes($_REQUEST['payload']));

好的,我首先打印原始post数据,然后再进行JSON解码。事实证明,我的PHP安装启用了magic quotes,并自动将转义斜杠放在JSON负载中的每个引号之前。显然,这使得JSON无效,结果JSON_解码出错

以下是简单的修复方法:

$payload = json_decode(stripslashes($_REQUEST['payload']));

您需要使用以下代码来获取JSON数据:

$data = json_decode( file_get_contents('php://input') );
如果你需要一个完整的解决方案;我从Github或Gitlab中找到了一些工具来帮助部署代码,所以我创建了Deepl.io来处理Web钩子和调用脚本,以便在您自己的服务器上部署。 这将处理从github或gitlab发送的JSON,并可用于多个存储库和分支等。您可以在收到pull通知后使用自己的PHP或shell脚本,并在每次部署后向您发送状态电子邮件。。。
查看它:

您需要使用以下代码来获取JSON数据:

$data = json_decode( file_get_contents('php://input') );
如果你需要一个完整的解决方案;我从Github或Gitlab中找到了一些工具来帮助部署代码,所以我创建了Deepl.io来处理Web钩子和调用脚本,以便在您自己的服务器上部署。 这将处理从github或gitlab发送的JSON,并可用于多个存储库和分支等。您可以在收到pull通知后使用自己的PHP或shell脚本,并在每次部署后向您发送状态电子邮件。。。
检查它:

如果您仍然有问题:我在Dreamhost上尝试了这段代码,没有
文件内容
,效果很好。您可能需要确保1)JSON解码不会因某种原因失败(因为您只是悄悄退出),2)文件保存本身没有权限错误或其他问题。(我用
mail
替换了
file\u put\u contents
,效果很好)我怀疑您的服务器是否拒绝了来自其他服务器的post请求。如果是的话,那么就没有人能够在你的网站上发布任何东西。您是否尝试过:
$json=file\u get\u contents(“php://input");
然后用
$payload=json\u decode($json)加载json如果您仍然有问题:我在Dreamhost上尝试了这段代码,没有
文件\u put\u contents
,效果很好。您可能需要确保1)JSON解码不会因某种原因失败(因为您只是悄悄退出),2)文件保存本身没有权限错误或其他问题。(我用
mail
替换了
file\u put\u contents
,效果很好)我怀疑您的服务器是否拒绝了来自其他服务器的post请求。如果是的话,那么就没有人能够在你的网站上发布任何东西。您是否尝试过:
$json=file\u get\u contents(“php://input");
然后用
$payload=json\u decode($json)加载json