PHP调用Shell脚本
需要设置php执行shell的root权限,否则执行sh会找不到命令。
1.通过system函数获取当前apache的用户,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<?php header( "Content-type: text/html; charset=utf-8" ); # echo system('whoami'); $result = shell_exec( 'sudo -E bash run.sh' ); $array = explode( '\n' ,$result); foreach ($array as $value) { echo "$value <br>" ; } ?> |
2.假如得到的用户是:www,执行命令: sudo visudo设置权限:
增加2行配置设置www以root方式运行shell脚本,如下:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
www ALL=(root) ALL
1
2
3
4
|
## Allows members of the 'sys' group to run networking, software, ## service management apps and more. # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS %www ALL=(ALL:ALL) NOPASSWD:ALL |
3.重启apache
4.设置php禁用函数,删除disable_functions=后面的exec system shell_exec 函数,重启php
运行Shell脚本时,如果出现linux /bin/bash^M: bad interpreter错误
解决办法:vim 编辑文件,esc后执行 “:set ff=unix”,将文件设置为unix格式,然后执行:wq,保存退出。
在Shell脚本里加入同步环境变量,非常重要
1
2
|
source ~/.bash_profile source /etc/profile |
没有回复内容