重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
?php
创新互联公司云计算的互联网服务提供商,拥有超过13年的服务器租用、成都移动机房、云服务器、虚拟主机、网站系统开发经验,已先后获得国家工业和信息化部颁发的互联网数据中心业务许可证。专业提供云主机、虚拟主机、空间域名、VPS主机、云服务器、香港云服务器、免备案服务器等。
$output = shell_exec('ls -la');//执行linux命令:ls -la
echo "pre$output/pre";//输出返回值
?
第一,应该查阅php.ini配置文档(我的配置文档位置是/etc/php5/php.ini),关闭安全模式 safe_mode=Off。
第二,给予php运行的用户和本机用户权限。php运行的用户名可以通过在localhost运行以下的php文件查到:
?php
echo shell_exec("id -a");
?123123
我的Ubuntu系统的php运行用户名是www-data(好蠢的名字…)
控制台下,执行 visudo,可以打开/etc/sudoers文件进行修改(利用visudo命令的意义在于,sudoers文件很重要,如果修改错了,visudo会提示你,而直接修改会导致系统出错,无法使用sudo…)
修改的地方在root的下一行:
‘查到的php运行的用户名’ ALL=(ALL) NOPASSWD:ALL
‘本机用户名’ ALL=(ALL) ALL
通过以上设置,应该就能完成ubuntu系统下php调用并执行shell脚本。
PS.相关的命令(详细请百度google之)
$output = shell_exec("xxx.sh");//只有失败的时候返回NULL
system("cmd string",$status);//$ststus在调用成功时返回true,失败返回false
system("sh /root/datasys/crm_data/one_day.sh $date");
这样就可以,但是我们要明白一点,数据传给sh是以字符串的形式,结构、指针等复杂类型变量传过去的效果不一定是我们想要的,需要转换为文本,而且sh要明白传来的文件格式。