背景
总结一下这两天加班遇到的坑,由于本次任务涉及到在PHP中使用exec函数运行shell命令,并解析返回值。屁颠屁颠的写好代码,上传到服务器,服务器环境配置centos6.5+Nginx,ssh到服务器,在控制台运行php xxx.php结果完美显示。蛋疼的是前端调用脚本的时候,没有数据,返回false,一脸懵逼,开始想问题所在,试着在浏览器地址栏直接访问xxx.php没有结果。然后把代码改成
exec("ls 2>&1", $result);
var_dump($result);
显示ls命令没找到,试着加上路径
exec("/bin/ls 2>&1", $result);
var_dump($result);
显示权限不够。
解决方法
- lsof -i:80 查看你Nginx的用户是谁,我这里是nginx
- 在脚本中添加file_put_contents(“/tmp/test.log”, “xxx”)查看test.log的用户是谁。我这里是nobody
在vim /etc/sudoers添加权限
nobody ALL=(ALL) NOPASSWD:ALL
nginx ALL=(ALL) NOPASSWD:ALL重启nginx服务。