Php GitHub WebHook帖子未通过
我已经设置了github webhoooks,以便在推送回购时向服务器上的PHP脚本发送帖子。() 我的PHP脚本记录连接IP以及收到的负载: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
$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代码>