php 抓取网页生成图片(用php执行系统命令的时候发现无法执行,但是可以执行CutyCapt)
优采云 发布时间: 2022-03-22 00:32php 抓取网页生成图片(用php执行系统命令的时候发现无法执行,但是可以执行CutyCapt)
在拍摄网站的截图时,我使用了服务器上的一个工具CutyCapt。在服务器端,可以直接使用命令抓取并生成指定url的图片。但是用php执行系统命令的时候发现不能执行,但是可以执行CutyCapt等帮助信息的命令("/usr/local/cutycapt/CutyCapt/xvfb-run.sh -- help"),但是执行调用系统变量的脚本不成功。怀疑是权限问题。后来把CutyCapt权限设置为www,发现不行。后来查资料发现是因为nginx服务器在执行命令的时候会调用shell脚本,然后就会出现权限问题。
萌宠
用于截图的系统命令:
/usr/bin/sudo /usr/local/cutycapt/CutyCapt/xvfb-run.sh /usr/local/cutycapt/CutyCapt/CutyCapt --url= --out=/tmp/insert.jpg
1、设置sudo配置文件可写权限
chmod u+w /etc/sudoers
2、添加 www 用户
用户执行CutyCapt脚本的权限(需要运行的脚本和命令都需要添加):
www ALL=(root) NOPASSWD: /bin/sh,/usr/local/cutycapt/CutyCapt/xvfb-run.sh, /usr/local/cutycapt/CutyCapt/CutyCapt
3、关闭【强制控制台登录】执行或允许www用户无控制台登录
修改:
注释掉:默认值要求
更好的修改方式(更安全):
仅添加:默认值:www !requiretty(www 用户不使用控制台登录)
4 用php执行
system('/usr/bin/sudo /usr/local/cutycapt/CutyCapt/xvfb-run.sh /usr/local/cutycapt/CutyCapt/CutyCapt --url= --out=/tmp/insert2.jpg',$m);
注意(更安全的方式):
system('sudo /usr/local/cutycapt/CutyCapt/xvfb-run.sh /usr/local/cutycapt/CutyCapt/CutyCapt --url= --out=/tmp/insert2.jpg' ,$m);
Nginx 重启:
同时增加www用户执行nginx脚本的权限