报错:
fatal: unable to set up default path; use --file fatal: could not read Username for 'http://10.100.11.5': No such device or address
demo 代码:
$giturl='http://10.100.11.5/appserver/appserver-api/'; $output=shell_exec("git clone {$giturl} 2>&1"); var_dump($output)
对应的www-data用户做了sudo 免密码
做了git免密码 (git config –global credential.helper store)
此代码在CLI命令行下运行正常
在apache下的web界面下报如题所示错误, 中间尝过许多办法。都无解。
思考过程:
1. su – www-data用户下的cli能正常运行,说明权限应该是没问题的
2. 分别在cli下和web下打印env相关东西
system("env");
结果发现两种情况下的环境变量相差很大。
尝试把web中的环境变量补充HOME变量后,问题解决了。
putenv("HOME=/home/www-data"); putenv("USER=www-data"); $giturl='http://10.100.11.5/appserver/appserver-api/'; $output=shell_exec("git clone {$giturl} 2>&1");
另一个解决办法:
默认的apache2.4会把HOME环境变量给unset 掉 见:/etc/apache2/envvars 第4行
# envvars - default environment variables for apache2ctl # this won't be correct after changing uid unset HOME #就是这里 # for supporting multiple apache2 instances
针对apache的解决办法也比较简单了 修改envvars文件, 增加HOME环境变量的导出就行
#unset HOME 注释这里 # for supporting multiple apache2 instances if [ "${APACHE_CONFDIR##/etc/apache2-}" != "${APACHE_CONFDIR}" ] ; then SUFFIX="-${APACHE_CONFDIR##/etc/apache2-}" else SUFFIX= fi #增加这里 export HOME=/home/www-data
apachectl stop && apachectl start (restart好像不会刷新环境变量)
问题解决, 解决此小问题,花费了好几个小时,都搞得有些怀疑自己的技术了。 ^_^