最近一直想要找一些PHP并行的rpc框架或者扩展,看了yar,看的过程中,发现其实php自带curl扩展也是可以做到并行处理的,只不过平时我们不习惯这样用,其实,如果我们的接口比较多,但是这些接口又相互独立,可以使用这样的方式,这样会大大缩短整个页面的运行时间。$url=array();$url[]='http://www.zhansanjie.com/2.php';$url[]='http://www.zhansanjie.com/2.php';$url[]='http://www.zhansanjie.com/2.php';$url[]='http://www.zhansanjie.com/2.php';$mtime=explode('',microtime());$startTime=$mtime[1]+$mtime[0];echo$s=$startTime;echoPHP_EOL;$mh=curl_multi_init();foreach($urlas$k=>$v){$ch[$k]=curl_init($v);curl_setopt($ch[$k],CURLOPT_HEADER,0);//不输出头curl_setopt($ch[$k],CURLOPT_RETURNTRANSFER,1);//exec返回结果而不是输出,用于赋值curl_multi_add_handle($mh,$ch[$k]);//决定exec输出顺序}$running=null;do{//执行批处理句柄curl_multi_exec($mh,$running);//CURLOPT_RETURNTRANSFER如果为0,这里会直接输出获取到的内容.如果为1,后面可以用curl_multi_getcontent获取内容.curl_multi_select($mh);//阻塞直到cURL批处理连接中有活动连接,不加这个会导致CPU负载超过90%.}while($running>0);foreach($chas$v){$info[]=curl_getinfo($v);$json[]=curl_multi_getcontent($v);curl_multi_remove_handle($mh,$v);}curl_multi_close($mh);$mtime=explode('',microtime());$startTime=$mtime[1]+$mtime[0];echo$t=$startTime;echoPHP_EOL;echo($t-$s);echoPHP_EOL;var_export($json);var_export($info);
某些业务场景下,我们会用到组合穷举方法,这里整理几个穷举方法1、不限顺序的数组组合穷举:<?php/***@param$arr需要组合数组*@paramint$num组合元素个数*@returnarray*/functiongetSequenceAry($arr,$num=1){$count=count($arr);$min=min($count,$num);if($min<1){returnfalse;}$return=array();for(;$min>=1;$min--){$arrRet=array();$max=$count-($min-1);for($i=0;$i<$max;$i++){getSequenceArySub($arr,$count,$min,$i,$arrRet,$return);}}return$return;}functiongetSequenceArySub($arr,$count,$min,$i,$arrRet=array(),&$return){if(empty($arr)||empty($count))returnfalse;if(1==$min){$arrRet[--$min]=$arr[$i];$return[]=$arrRet;}else{$arrRet[--$min]=$arr[$i];for($j=$i+1;$j<($count);$j++){getSequenceArySub($arr,$count,$min,$j,$arrRet,$return);}}}print_r(getSequenceAry(array(1,2,3,4,5),1));print_r(getSequenceAry(array(1,2,3,4,5),2));print_r(getSequenceAry(array(1,2,3,4,5),3));print_r(getSequenceAry(array(1,2,3,4,5),4));print_r(getSequenceAry(array(1,2,3,4,5),5));结果:Array([0]=>Array([0]=>1)[1]=>Array([0]=>2)[2]=>Array([0]=>3)[3]=>Array([0]=>4)[4]=>Array([0]=>5))Array([0]=>Array([1]=>1[0]=>2)[1]=>Array([1]=>1[0]=>3)[2]=>Array([1]=>1[0]=>4)[3]=>Array([1]=>1[0]=>5)[4]=>Array([1]=>2[0]=>3)[5]=>Array([1]=>2[0]=>4)[6]=>Array([1]=>2[0]=>5)[7]=>Array([1]=>3[0]=>4)[8]=>Array([1]=>3[0]=>5)[9]=>Array([1]=>4[0]=>5))Array([0]=>Array([2]=>1[1]=>2[0]=>3)[1]=>Array([2]=>1[1]=>2[0]=>4)[2]=>Array([2]=>1[1]=>2[0]=>5)[3]=>Array([2]=>1[1]=>3[0]=>4)[4]=>Array([2]=>1[1]=>3[0]=>5)[5]=>Array([2]=>1[1]=>4[0]=>5)[6]=>Array([2]=>2[1]=>3[0]=>4)[7]=>Array([2]=>2[1]=>3[0]=>5)[8]=>Array([2]=>2[1]=>4[0]=>5)[9]=>Array([2]=>3[1]=>4[0]=>5))Array([0]=>Array([3]=>1[2]=>2[1]=>3[0]=>4)[1]=>Array([3]=>1[2]=>2[1]=>3[0]=>5)[2]=>Array([3]=>1[2]=>2[1]=>4[0]=>5)[3]=>Array([3]=>1[2]=>3[1]=>4[0]=>5)[4]=>Array([3]=>2[2]=>3[1]=>4[0]=>5))Array([0]=>Array([4]=>1[3]=>2[2]=>3[1]=>4[0]=>5))2、穷举排列组合的函数<?phpfunctiongetSequenceAry($arr){if(count($arr)==1){returnarray($arr);}$arrRet=array();foreach($arras$k=>$v){$arr2=$arr;unset($arr2[$k]);$arrOrderList=getSequenceAry($arr2);foreach($arrOrderListas$order){array_unshift($order,$v);$arrRet[]=$order;}}return$arrRet;}functiongetSequenceStr($arr){if(count($arr)==1){return$arr;}$arrRet=array();foreach($arras$k=>$v){$arr2=$arr;unset($arr2[$k]);$arrOrderList=getSequenceStr($arr2);foreach($arrOrderListas$order){$arrRet[]=$v.$order;}}return$arrRet;}print_r(getSequenceAry(array(1,2,3)));print_r(getSequenceStr(array(1,2,3)));------------------output------------------Array([0]=>Array([0]=>1[1]=>2[2]=>3)[1]=>Array([0]=>1[1]=>3[2]=>2)[2]=>Array([0]=>2[1]=>1[2]=>3)[3]=>Array([0]=>2[1]=>3[2]=>1)[4]=>Array([0]=>3[1]=>1[2]=>2)[5]=>Array([0]=>3[1]=>2[2]=>1))Array([0]=>123[1]=>132[2]=>213[3]=>231[4]=>312[5]=>321)
php获取来源地址判断访客搜索引擎来源及访客搜索的关键词(为了防止分析用户行为各大搜索引擎早已经优化了,搜索关键词基本上是拿不到了,搜狗部分还能拿到),以百度、谷歌、360搜索、搜狗、必应、神马、头条搜索、有道搜索为例,写个简单易懂的代码(暂时不去考虑其他实际应用因素):<?php/***根据url分析搜索引擎来源及搜索关键词*/functiongetWordFrom($referer){//$referer=isset($_SERVER['HTTP_REFERER'])?$_SERVER['HTTP_REFERER']:'';if(strstr($referer,'baidu.com')){//百度@preg_match("|baidu.+wo?r?d=([^\\&]*)|is",$referer,$tmp);$keyword=isset($tmp[1])?urldecode($tmp[1]):'';$from='百度';}elseif(strstr($referer,'google.com')orstrstr($referer,'google.cn')){//谷歌@preg_match("|google.+q=([^\\&]*)|is",$referer,$tmp);$keyword=isset($tmp[1])?urldecode($tmp[1]):'';$from='谷歌';}elseif(strstr($referer,'so.com')){//360搜索@preg_match("|so.+q=([^\\&]*)|is",$referer,$tmp);$keyword=isset($tmp[1])?urldecode($tmp[1]):'';$from='360搜索';}elseif(strstr($referer,'sogou.com')){//搜狗@preg_match("|sogou.com.+query=([^\\&]*)|is",$referer,$tmp);$keyword=isset($tmp[1])?urldecode($tmp[1]):'';$from='搜狗搜索';}elseif(strstr($referer,'soso.com')){//搜搜@preg_match("|soso.com.+w=([^\\&]*)|is",$referer,$tmp);$keyword=isset($tmp[1])?urldecode($tmp[1]):'';$from='搜搜';}elseif(strstr($referer,'bing.com')){//必应@preg_match("|bing.+q=([^\\&]*)|is",$referer,$tmp);$keyword=isset($tmp[1])?urldecode($tmp[1]):'';$from='必应';}elseif(strstr($referer,'sm.cn')){//神马@preg_match("|sm.+q=([^\\&]*)|is",$referer,$tmp);$keyword=isset($tmp[1])?urldecode($tmp[1]):'';$from='神马';}elseif(strstr($referer,'toutiao.eastday.com')){//头条搜索@preg_match("|toutiao.eastday.+kw=([^\\&]*)|is",$referer,$tmp);$keyword=isset($tmp[1])?urldecode($tmp[1]):'';$from='头条搜索';}else{$keyword='';$from='-';}returnarray('keyword'=>$keyword,'from'=>$from);}调用:<?php$referer=isset($_SERVER['HTTP_REFERER'])?$_SERVER['HTTP_REFERER']:'';//$referer='https://m.sm.cn/s?q=站三界导航';//或者已有连接$fromInfo=getWordFrom($referer);//print_r($fromInfo);//查看输出结果集?>打印结果集:Array([keyword]=>站三界导航[from]=>百度)头条、有道基本是用不到。雅虎搜索就不考虑了,雅虎已是历史了。
PHP字符串截取,支持数字字母英文中文混淆字符串截取。语法:my_substr(string,length,start,type);参数:(1)string:要截取的字符串[必填];(2)length:字符串截取的长度[整形][非必填](默认为10);(3)start:字符串开始截取的位置[整形][非必填](默认为0);(4)type:字符串截取的类型[非必填]; true或者有值条件为真:初始字符串大于要截取的字符串时返回的字符串后追加… false/0等条件为非:返回的字符串后不追加…(5)encoding:字符串编码[非必填](默认utf-8);返回值:string字符串。调用示例:$str='分享编程-站三界导航-';$newStr=my_substr($str,5,4);echo$newStr;//输出:-站三界导航-自封装的方法:functionmy_substr($str,$len=10,$start=0,$type=0,$encoding='utf-8'){if($type){$leng=@mb_strlen($str,$encoding);if($leng>$len){return@mb_substr($str,$start,$len,$encoding).'…';}}return@mb_substr($str,$start,$len,$encoding);}
图片验证码字符随机生成,php随机生成字符串,数字字母随机打乱,同时还支持中文汉字字符串随机生成,自封装方法详细内容如下:语法:rand_strs(length,type,string);参数:(1)length:截取字符串的长度[整形][非必填]默认值为4;(2)type:字符串截取的类型[整形][非必填],1:纯数字;2:纯小写字母;3:纯大写字母;4:大小写字母;5:小写字母和数字;6:大写字母和数字;7:字母和数字;8:预生成汉字;9:随机自动生成汉字0其他:字母和数字,去掉了容易混淆的字母oOlZz和数字012;(3)string:[字符串][非必填]在方法已有的字符串基础上追加字符串;返回值:string字符串调用示例://示例一(随机六位字符串,类型默认:去掉容易混淆的数字字母)$str=rand_strs(6);echo$str;//示例二(随机四位字符串,类型为预生成的简单汉字)$str=rand_strs(4,8);echo$str;//示例三(随机四位字符串,类型为预生成的简单汉字字符串并自定义的字符串“越加网分享编程”也参与随机字符中)$str=rand_strs(4,8,'越加网分享编程');echo$str;自封装的方法:/***Notes:获取随机字符串*User:ZHL*Return:string*/functionrand_strs($len=4,$type=0,$str=''){$newStr='';//要获取的字符串if(preg_match("/[\x7f-\xff]/",$str)&&$type!='8'&&$type!='9'){//类型不为8,9并且存在中文字符时强制用汉字$str='';}switch($type){//选定字符串类型case1://纯数字$str='0123456789'.$str;break;case2://纯小写字母$str='abcdefghijklmnopqrstuvwxyz'.$str;break;case3://纯大写字母$str='ABCDEFGHIJKLMNOPQRSTUVWXYZ'.$str;break;case4://纯字母$str='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'.$str;break;case5://小写字母和数字$str='abcdefghijklmnopqrstuvwxyz0123456789'.$str;break;case6://大写字母和数字$str='ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'.$str;break;case7://字母和数字$str='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'.$str;break;case8://预生成汉字$str='大小多少左右上下白云太阳月亮星工人爸妈爷奶今天金木水火土红色衣花公母哭笑苦高兴吃玩乐打豆羊牛马车水电飞鸟东西南北方向'.$str;break;case9://自动生成汉字for($i=0;$i<$len;$i++){//使用chr()函数拼接双字节汉字,前一个chr()为高位字节,后一个为低位字节$strNo=chr(mt_rand(0xB0,0xD0)).chr(mt_rand(0xA1,0xF0));$str.=iconv('GB2312','UTF-8',$strNo);//转码}break;default://默认,去掉了容易混淆的字母oOlZz和数字012$str='abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXY3456789'.$str;break;}if($type!=9){//所需大于固定长度时$strLen=mb_strlen($str,'UTF8');if($len>$strLen){//位数过长重复字符串一定次数$str=str_repeat($str,$len);}}if($type==8||$type==9){//汉字时//计算最大长度-1$strLen=mb_strlen($str,'UTF8')-1;//循环$len次获得字符串for($i=0;$i<$len;$i++){$newStr.=mb_substr($str,floor(mt_rand(0,$strLen)),1,'UTF8');//随机长度内数字,截取随机数向后一个长度}}else{//普通字符串$newStr=substr(str_shuffle($str),0,$len);//字符串随机排序后截取$len长度}return$newStr;}
php判断网络协议请求类型是http还是https的方法如下:<?phpfunctiongetRequestType(){$type='http://';if(((isset($_SERVER['HTTPS'])&&$_SERVER['HTTPS']=='on')||(isset($_SERVER['HTTP_X_FORWARDED_PROTO'])&&$_SERVER['HTTP_X_FORWARDED_PROTO']=='https'))){$type='https://';}return$type;}?>条件太长不方便看可以这样:<?phpfunctiongetRequestType(){$type='http://';$term1=(isset($_SERVER['HTTPS'])&&$_SERVER['HTTPS']=='on')==true;$term2=(isset($_SERVER['HTTP_X_FORWARDED_PROTO'])&&$_SERVER['HTTP_X_FORWARDED_PROTO']=='https')==true;if($term1||$term2){$type='https://';}return$type;}?>你还可以这样:<?php$httpType=((isset($_SERVER['HTTPS'])&&$_SERVER['HTTPS']=='on')||(isset($_SERVER['HTTP_X_FORWARDED_PROTO'])&&$_SERVER['HTTP_X_FORWARDED_PROTO']=='https'))?'https://':'http://';?>如果是解析已有的url连接,方法如下:<?php$httpType=((isset($_SERVER['HTTPS'])&&$_SERVER['HTTPS']=='on')||(isset($_SERVER['HTTP_X_FORWARDED_PROTO'])&&$_SERVER['HTTP_X_FORWARDED_PROTO']=='https'))?'https://':'http://';?>如果是解析已有的url连接,方法如下:$httpType=strpos($url,'https://')!==false?'https://':'http://';
PHP生成随机数图片验证码,登录、注册、表单提交等图片验证码生成示例。业务流程示例:html页面img标签src属性里边编写生成图片验证码的url,调用生成图片验证码方法,然后把随机生成的验证码数字保存到session中,页面展示图片验证码,用户填写后再服务端接收用户填写的验证码和session中验证码对比,一致通过验证,不一致验证码匹配错误。以下是src中生成图片验证的示例:verifyCode();//调用方法/***生成随机数保存session调用验证码图片生成*/functionverifyCode(){//生成随机数$rand=rand(1000,9999);//把随机数保存到session中session_start();$_SESSION['verify_code']=$rand;session_write_close();//调用图片验证码imgCode($rand);}/***PHP生成图片验证码方法*/functionimgCode($strTxt='1234',$length=4,$width=100,$height=40){header("Content-type:text/html;charset=utf-8");header("Content-type:image/png");$strTxt=strval($strTxt);//先定义图片的长、宽$aimg=imagecreate($width,$height);//生成图片imagecolorallocate($aimg,255,255,255);//图片底色,imagecolorallocate第1次定义颜色php就认为是底色了//生成雪花背景for($i=1;$i<=200;$i++){//先用200个做测试imagestring($aimg,0,mt_rand(1,$width),mt_rand(1,$height),"*",imagecolorallocate($aimg,mt_rand(150,255),mt_rand(150,255),mt_rand(150,255)));//其实也不是雪花,就是生成*号而已。为了使它们看起来"杂乱无章、5颜6色",//就得在1个1个生成它们的时候,让它们的位置、颜色,甚至大小都用随机数,rand()或mt_rand都可以完成。}//生成随机数显示到图片,位置、大小、颜色都用成随机数//为了区别于背景,这里的颜色不超过200,上面的不小于200for($i=0;$i<strlen($strTxt);$i++){imagestring($aimg,mt_rand(20,50),$i*$width/$length+mt_rand(1,5),mt_rand(1,$height/2),$strTxt[$i],imagecolorallocate($aimg,mt_rand(0,100),mt_rand(0,150),mt_rand(0,150)));}imagepng($aimg);//生成png格式imagedestroy($aimg);//释放与image关联的内存exit();}
判断是否来自手机移动端:functionisMobile(){//如果有HTTP_X_WAP_PROFILE则一定是移动设备if(isset($_SERVER['HTTP_X_WAP_PROFILE'])){returntrue;}//如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息if(isset($_SERVER['HTTP_VIA'])){//找不到为flase,否则为truereturnstristr($_SERVER['HTTP_VIA'],"wap")?true:false;}//脑残法,判断手机发送的客户端标志,兼容性有待提高。其中'MicroMessenger'是电脑微信if(isset($_SERVER['HTTP_USER_AGENT'])){$clientkeywords=array('nokia','sony','ericsson','mot','samsung','htc','sgh','lg','sharp','sie-','philips','panasonic','alcatel','lenovo','iphone','ipod','blackberry','meizu','android','netfront','symbian','ucweb','windowsce','palm','operamini','operamobi','openwave','nexusone','cldc','midp','wap','mobile','MicroMessenger');//从HTTP_USER_AGENT中查找手机浏览器的关键字if(preg_match("/(".implode('|',$clientkeywords).")/i",strtolower($_SERVER['HTTP_USER_AGENT']))){returntrue;}}//协议法,因为有可能不准确,放到最后判断if(isset($_SERVER['HTTP_ACCEPT'])){//如果只支持wml并且不支持html那一定是移动设备//如果支持wml和html但是wml在html之前则是移动设备if((strpos($_SERVER['HTTP_ACCEPT'],'vnd.wap.wml')!==false)&&(strpos($_SERVER['HTTP_ACCEPT'],'text/html')===false||(strpos($_SERVER['HTTP_ACCEPT'],'vnd.wap.wml')<strpos($_SERVER['HTTP_ACCEPT'],'text/html')))){returntrue;}}returnfalse;}判断是否来自微信内置浏览器:functionisWeixin(){if(strpos($_SERVER['HTTP_USER_AGENT'],'MicroMessenger')!==false){returntrue;}else{returnfalse;}}
用php获取访问用户的设备代理信息,可以获取设备类型是移动端还是电脑端、设备的系统类型是windows还是linux等以及用的哪个浏览器甚至手机品牌等。以下源码获取终端设备是移动端还是电脑端,系统类型,浏览器类型为例:functiongetUserAgentInfo(){//获取user-agent$userAgent=empty($_SERVER['HTTP_USER_AGENT'])?'null':$_SERVER['HTTP_USER_AGENT'];//判断访问设备类型$regex_match="/(nokia|iphone|android|motorola|^mot\-|softbank|foma|docomo|kddi|up\.browser|up\.link|KFAPWI|mobile|";$regex_match.="htc|dopod|ipad|blazer|netfront|helio|hosin|huawei|novarra|CoolPad|webos|techfaith|palmsource|";$regex_match.="blackberry|alcatel|amoi|ktouch|nexian|samsung|^sam\-|s[cg]h|^lge|ericsson|philips|sagem|wellcom|bunjalloo|maui|";$regex_match.="symbian|smartphone|midp|wap|phone|windowsce|WindowsPhone|iemobile|^spice|^bird|^zte\-|longcos|pantech|gionee|^sie\-|portalmmm|";$regex_match.="jig\sbrowser|hiptop|^ucweb|^benq|haier|^lct|opera\s*mobi|opera\*mini|320x320|240x320|176x220";$regex_match.=")/i";$device="PC";if(isset($_SERVER['HTTP_X_WAP_PROFILE'])orisset($_SERVER['HTTP_PROFILE'])orpreg_match($regex_match,strtolower($userAgent))){$device='M';}//判断访问系统$system="unknown";$ios_regex="/(iPhoneOS|iPad)/i";if(false!==stripos($userAgent,'Android')){$system="Android";}elseif(false!==stripos($userAgent,'WindowsPhone')){$system="WindowsPhone";}elseif(false!==stripos($userAgent,'WindowsNT')){$system="Windows";}elseif(preg_match($ios_regex,$userAgent)){$system="IOS";}elseif(false!==stripos($userAgent,'Mac')){$system="MacOS";}elseif(false!==stripos($userAgent,'Linux')){$system="Linux";}elseif(false!==stripos($userAgent,'Unix')){$system="Unix";}//判断访问客户端$client="unknown";$ie_regex="/(MSIE|Trident)/i";if(stripos($userAgent,'MicroMessenger')){$client="WeiXin";}elseif(stripos($userAgent,'AlipayClient')){$client="Alipay";}elseif(stripos($userAgent,'QQTheme')){$client="QQ";}elseif(stripos($userAgent,'HeyTapBrowser')){$client="HeyTap";}elseif(stripos($userAgent,'VivoBrowser')){$client="Vivo";}elseif(stripos($userAgent,'MQQBrowser')){$client="QQ浏览器移动端";}elseif(stripos($userAgent,'MQQBrowser')){$client="QQ浏览器";}elseif(stripos($userAgent,'baiduboxapp')){$client="百度app";}elseif(stripos($userAgent,'weibo')){$client="WeiBo";}elseif(stripos($userAgent,'iqiyi')){$client="爱奇艺";}elseif(stripos($userAgent,'aweme')){$client="抖音";}elseif(stripos($userAgent,'kdtUnion_iting')){$client="喜马拉雅";}elseif(stripos($userAgent,'UCBrowser')){$client="UC";}elseif(stripos($userAgent,'DingTalk')){$client="钉钉";}elseif(stripos($userAgent,'SamsungBrowser')){$client="三星浏览器";}elseif(stripos($userAgent,'HUAWEIEVA')){$client="华为浏览器";}elseif(stripos($userAgent,'NokiaBrowser')){$client="诺基亚浏览器";}elseif(stripos($userAgent,'Opera')){$client="欧朋浏览器";}elseif(stripos($userAgent,'Firefox')){$client="火狐浏览器";}elseif(stripos($userAgent,'Chrome')){$client="谷歌";}elseif(stripos($userAgent,'Safari')){$client="苹果浏览器";}elseif(preg_match($ie_regex,$userAgent)){$client="IE";}returnArray('device'=>$device,'system'=>$system,'client'=>$client);}
当在调试代码和代码优化时通过计算程序运行时间以及内存开销是很有必要的,通过microtime()函数可以获得时间戳的微秒数,通过memory_get_usage()函数可以获得系统分配的内存大小。函数讲解microtime(get_as_float)函数返回当前Unix时间戳的微秒数,get_as_float可选,当设置为TRUE时,规定函数返回浮点数,FALSE则返回字符串,默认为FALSE。示例:echomicrotime()//0.991549001595469500echomicrotime(true)//1595469500.9915memory_get_usage(real_usage)函数返回分配给PHP的内存量,单位是字节(byte)。real_usage如果设置为TRUE获取系统分配总的内存尺寸,包括未使用的页。如果设置为FALSE报告实际使用的内存量,默认为FALSE。示例:echomemory_get_usage();//362280echomemory_get_usage(true);//2097152函数应用/***程序运行计算*/functionrunExpend($param=array()){if(!$param){returnarray('startTime'=>microtime(true),'startRam'=>memory_get_usage());}returnarray('times'=>round((microtime(true)-$param['startTime']),3).'s','ram'=>round((memory_get_usage()-$param['startRam'])/1024,2).'kb');}//第一次调用自动设置初始值$runParam=runExpend();//业务程序代码块-startfor($i=0;$i<100000000;$i++){$i;}//业务程序代码块-end//第二次调用并给予第一次的返回值$runVar=runExpend($runParam);//打印结果print_r($runVar);打印内容示例:Array([times]=>1.659s[ram]=>0.29kb)