У меня есть github webhoooks, настроенный для отправки POST скрипту PHP на моем сервере, когда я нажимаю на репо. (https://help.github.com/articles/post-receive-hooks)GitHub WebHook POSTs не проходит
MY 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. Кроме того, если я вручную помещаю переменную полезной нагрузки $ _GET в URL-адрес, это записывается (поскольку я проверяю $ _REQUEST, а не только $ _POST). Мое подозрение в том, что мой PHP-сервер настроен на отказ от запросов POST с других серверов. Я использую 1and1 Shared Hosting, поэтому у меня нет выделенного элемента управления, но я могу использовать SSH, а также настраивать настройки PHP локально с .ini-файлом. Любые предложения будут ценны!
* Мне все равно, если я это делаю на PHP или на каком-то другом языке. Если вы считаете, что это может быть проще с использованием Python или чего-то еще, это тоже классно.
-Jeremy
Если у вас все еще есть проблемы: я пробовал этот код на Dreamhost, без 'file_put_contents', и он работал нормально. Возможно, вам захочется убедиться, что 1) декодер JSON по какой-то причине не терпит неудачу (поскольку вы просто выходите без пауз), и 2) у вас нет ошибки разрешений или что-то в этом файле. (Я заменил 'file_put_contents' на' mail', и он работал нормально) –
Я сомневаюсь, что ваш сервер отказывает в почтовых запросах с других серверов. Если бы это было так, никто не смог бы опубликовать что-либо на вашем сайте. Вы пробовали: '$ json = file_get_contents (" php: // input ");' и затем загрузите json с помощью '$ payload = json_decode ($ json);' – MBeale