php调用shell脚本

最近接到一个项目,需要用php调用执行shell脚本,现把一些心得写下,供后者参考。

一、首先我们需要定义一个执行shell的通用方法

/**
 * 跨平台执行脚本
 *
 * @return array
 * array['output'] 执行后的输出结果
 * array['status'] 执行状态 0为正常 127 找不到脚本 126没有执行该shell脚本权限
 */
function terminal($command) {
	// system
	if (function_exists ( 'system' )) {
		ob_start ();
		system ( $command, $return_var );
		$output = ob_get_contents ();
		ob_end_clean ();
	} 	// passthru
	else if (function_exists ( 'passthru' )) {
		ob_start ();
		passthru ( $command, $return_var );
		$output = ob_get_contents ();
		ob_end_clean ();
	} 	

	// exec
	else if (function_exists ( 'exec' )) {
		exec ( $command, $output, $return_var );
		$output = implode ( "\n", $output );
	} 	

	// shell_exec
	else if (function_exists ( 'shell_exec' )) {
		$output = shell_exec ( $command );
	} 

	else {
		$output = 'Command execution not possible on this system';
		$return_var = 1;
	}
	
	return array (
			'output' => $output,
			'status' => $return_var 
	);
}
二、如何调用shell脚本 [我把脚本都放在根目录下shell文件夹下]


1、直接调用对应脚本的名称

 $service=terminal('./shell/aa.sh ');//当然这需要在linux下运行

此时print_r($service)看输出结果 

2、通过脚本函数名称调用[watch-service为要调用的函数]

 $service=terminal('./shell/aa.sh watch_service');
3、通过php给shell脚本传参数[$str1,$str2为两个要传递的参数]
 $service=terminal('./shell/aa.sh watch_service '.$str1.' '. $str2 );

三、处理执行结果 

如果是数组就直接foreach就行了

$result=$service['output'];
foreach($result as $value){
echo $value['name'];
}

如果返回的是json
$result=json_decode($service['output']);
foreach($result as $value){
echo $value->service_name;//service_name数组中的值
echo $value->...;
}


分享至
2014-01-14 发布 ┊ 14102 人浏览 ┊ 2 人评论 ┊ 来源:原创 ┊ 收藏
回复
  • # 1ak47 2019-01-23 20:39┆
    这个代码很有用啊!!
返回顶部