最近接到一个项目,需要用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']; }
$result=json_decode($service['output']); foreach($result as $value){ echo $value->service_name;//service_name数组中的值 echo $value->...; }