PHP提供共了3个专门的执行外部命令的函数:system(),exec(),passthru()。
本文主要以exe()函数为例,说明php执行shell脚本的实现方法和调试。
当我们在php脚本中使用函数exec('sudo sh /var/www/test.sh'),实际结果是如此操作展现给我们的是空白结果,并且test.sh没有执行,此时就需要加参数来进行调试了。
php中修改函数如下:
exec('sudo sh /var/www/test.sh 2>&1',$res,$status);
var_dump($res);
echo '<br >';
echo $status;
当$status的值为0时,脚本才执行正常的,错误信息都保存在了$res中。
错误信息为:“sudo: sorry, you must have a tty to run sudo”
意思就是sudo默认需要tty终端。注释掉就可以在后台执行了。
chmod u+w /etc/sudoers
vi /etc/sudoers (最好用visudo命令)
注释掉 Default requiretty 一行
#Default requiretty
#把www权限加进去
www ALL=NOPASSWD:ALL
chmod u-w /etc/sudoers