php网页中执行exec一例--svn update
<?php$username = 'abc';$password = '123456';$target_dir = '/var/my_work_folder';$arg_file = '/var/args';exec("sudo svn up --username $username --password $password $target_dir 2>&1 <$arg_file", $output);print_r($output);
/var/args文件内容如下:
pyes
这是因为第一次执行svn up时可能要求交互确认信息(如,svn密码是否永久保存确认等),需要通过管道输入。
本以为以上的写法天衣无缝,其实不然,因为sudo配置信息必须保证php网页执行用户(我这里是apache)具备合适的权限执行svn 命令。
为此,修改sudo配置文件,直接键如visudo命令编辑配置文件:
1. 注释Defaults requiretty
Defaults requiretty修改为 #Defaults requiretty, 表示不需要控制终端。
否则会出现sudo: sorry, you must have a tty to run sudo
2. 增加行 Defaults visiblepw
否则会出现 sudo: no tty present and no askpass program specified
3. 赋予apache用户执行svn权限
如,增加行:apache ALL=(ALL) NOPASSWD: /usr/bin/svn
注:NOPASSWD可以使在命令执行时不需要交互输入apache用户的密码