php web钩子 | 我的日常分享

php web钩子

php web钩子

参考文章:gogs 实现webhook钩子(php接口形式)

参考文章,在public运行目录中建立githook.php粘贴代码:

1
2
3
4
5
<?php
$cmd = "cd /www/wwwroot/project/ && git reset --hard origin/master && sudo git pull origin master 2>&1";
$res = array();
exec($cmd,$res);
var_dump($res);

发现网页上始终输出为NULL,命令并未执行,将命令改为ls,执行成功显示当前文件夹文件,但是加&& mkdir ff,或者单独建立文件夹,也是输出NULL,于是猜想这样似乎能够读,无法写,是不是权限问题,于是chmod配置当前项目所有文件的权限,以及所属用户,一顿操作之后仍然不行。

于是将exec()改为了shell_exec(),结果依旧,在执行有写操作的命令时似乎就不行。期间重启过php,版本为7.x。倒腾了很久很久都无效。

睡觉躺着用手机搜到了两个可能原因,大概都是打开了安全模式。如下两篇文章:

  1. php exec函数没有生效怎么办

  2. linux 下 php执行 exec 无反应 返回值为空

时间来到了第二天的毛概课上,利用手机远程控制电脑,重新建立githook.php,(昨天睡觉前把文件都删了)复制之前一样的PHP代码,尝试执行,如果不行准备利用昨天睡觉前find的两个原因尝试,没想到执行命令成功,结果如下图:疑惑了,怎么突然好了。

image-20220418200109807

命令执行了就好说了,现在要解决的问题是We trust you have receviced to usual lecture from the local system....,原因是在执行sudo命令时需要输入密码,我们只需要配置不需要输入密码就能够解决。

打开文件/etc/sudoers,因为执行PHP文件的是www用户,这里添加%www ALL=(ALL) NOPASSWD:ALL

image-20220418200818563

参考文章:linux下面无法运行sudo命令