当前位置:编程学习 > php >>

PHP调用系统命令(实现CutyCapt截图、nginx网页重启等)

在做对网站截图的时候,用到了服务器的一个工具CutyCapt,在服务器上可以直接用命令进行抓取,生成指定url的图片。但是在用php执行系统命令的时候,发现无法执行,但是可以执行CutyCapt这样的帮助信息的命令(“/usr/local/cutycapt/CutyCapt/xvfb-run.sh --help”),但是执行调用系统变量的脚本却无法成功。怀疑是权限的问题,后来将CutyCapt权限设置为www,发现也不行,后来查找资料,发现是由于nginx服务器在执行命令的时候,会调用shell脚本,这时会遇到权限问题。
 
CutyCapt
 
截图用到的系统命令:
 
/usr/bin/sudo /usr/local/cutycapt/CutyCapt/xvfb-run.sh  /usr/local/cutycapt/CutyCapt/CutyCapt --url=http://www.163.com --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用户不使用控制台登录
 
修改内容:
 
注释掉:Defaults    requiretty
 
更好的修改方式(较安全):
 
只添加:Defaults:www    !requiretty  (www用户不使用控制台登录)
 
 
4 用php执行
 
system('/usr/bin/sudo /usr/local/cutycapt/CutyCapt/xvfb-run.sh  /usr/local/cutycapt/CutyCapt/CutyCapt --url=http://www.163.com --out=/tmp/insert2.jpg',$m);
注(更安全方式):
 
system('sudo /usr/local/cutycapt/CutyCapt/xvfb-run.sh  /usr/local/cutycapt/CutyCapt/CutyCapt --url=http://www.163.com --out=/tmp/insert2.jpg',$m);
 
Nginx重启:
 
同样增加www用户执行nginx脚本的权限
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,