PHP调用Shell脚本,命令找不到环境变量问题解决-PHP技术分享论坛-操作系统-久趣源码交流论坛
PHP技术分享-久趣源码交流论坛

PHP技术分享

久趣社区【PHP学院】--一个专注用于游戏或者源码里的PHP实用性社区!
帖子
56
互动
6
阅读
850

PHP调用Shell脚本,命令找不到环境变量问题解决

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脚本,如下:

PHP调用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

PHP调用Shell脚本,命令找不到环境变量问题解决

运行Shell脚本时,如果出现linux /bin/bash^M: bad interpreter错误

解决办法:vim 编辑文件,esc后执行 “:set ff=unix”,将文件设置为unix格式,然后执行:wq,保存退出。

在Shell脚本里加入同步环境变量,非常重要

1
2
source ~/.bash_profile
source /etc/profile
请登录后发表评论

    没有回复内容