| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- <?php
- /**
- * 信呼中node队列的处理
- */
- class rockqueueChajian extends Chajian
- {
- //队列服务器主机
- private $rockqueue_host = '127.0.0.1';
-
- //队列服务端口,数字类型,为0从服务器设置上读取
- private $rockqueue_port = 0;
-
- private $cmdshell;
-
- //初始化配置读取
- protected function initChajian()
- {
- $this->rockqueue_host = getconfig('rockqueue_host', $this->rockqueue_host);
- $this->rockqueue_port = getconfig('rockqueue_port', $this->rockqueue_port);
- if($this->rockqueue_port==0){
- $reim = m('reim');
- $reimhot = $reim->getpushhostport($reim->serverpushurl);
- $this->rockqueue_host = $reimhot['host'];
- $this->rockqueue_port = $reimhot['port'];
- }
-
-
- $this->cmdshell = array(
- array('soffice.exe','php.exe'), //win下必须包含
- array('libreoffice'), //Linux下包含
- array('pdf:writer_pdf_Export') //命令里至少要有一个
- );
- }
-
- /**
- * 发送队列信息
- * $cont 内容可以是http地址,也可以如:cli,run
- * $param 参数
- * 使用 c('rockqueue')->push('cli,run');
- */
- public function push($cont, $param=array(), $runtime=0, $id=0)
- {
- $type = 'cmd';
- $url = $cont;
- $queuelogid = 0;
- if(!isset($param['nolog'])){
- $queuelogid= m('log')->addlogs('异步队列','', 3);
- $param['queuelogid'] = $queuelogid;
- }
- if(substr($cont,0,4)=='http'){
- $type='url';
- }else{
- if(!contain($url, ','))$url='cli,'.$url.'';
- $phppath = getconfig('phppath');
- if(!contain($this->rockqueue_host, '127.0.0.1') || isempt($phppath)){
- $urla= explode(',', $url);
- $url = URL.'task.php?m='.$urla[0].'|runt&a='.$urla[1].'';
- $type= 'url';
- }else{
- $st1 = '';
- $check = c('check');
- foreach($param as $k=>$v)$st1.=' -'.$k.'='.$v.'';
- if(contain($phppath,' ') || $check->isincn($phppath))
- return returnerror('配置文件phppath不能有空格,请加入环境变量设置并为php');
- if(contain(ROOT_PATH,' ') || $check->isincn(ROOT_PATH))
- return returnerror('OA系统目录“'.ROOT_PATH.'”有空格,无法使用');
- $url = ''.$phppath.' '.ROOT_PATH.'/task.php '.$url.''.$st1.'';
- }
- }
- if($type=='url'){
- $jg = contain($url,'?')?'&':'?';
- $st1 = '';
- foreach($param as $k=>$v)$st1.='&'.$k.'='.$v.'';
- if($st1!='')$url.=''.$jg.''.substr($st1,1).'';
- }
-
- if($id==0)$id = rand(1,99999);
- $rarr[] = array(
- 'qtype' => $type,
- 'runtime' => $runtime,
- 'url' => $url,
- 'id' => $id
- );
- $barr = $this->pushdata($rarr);
- $barr['cmdurl'] = ''.$type.':'.$url;
- if($runtime==0)$runtime = time();
- if($queuelogid>0){
- m('log')->update(array(
- 'url' => $url,
- 'remark'=> '['.$type.']'.date('Y-m-d H:i:s', $runtime).'',
- ),$queuelogid);
- }
- return $barr;
- }
-
- /**
- * 执行shell命令
- */
- public function pushcmd($cmd)
- {
- if(contain(PHP_OS,'WIN')){
- $cmdshell = $this->cmdshell[0];
- }else{
- $cmdshell = $this->cmdshell[1];
- }
- $qianz = explode(' ', $cmd);
- $qianz = $qianz[0];
- //$boa = false;
- //foreach($cmdshell as $sell)if(contain($qianz, $sell))$boa = true;
- //if(!$boa)return returnerror('非法操作');
-
- $boa = false;
- foreach($this->cmdshell[2] as $sell)if(contain($cmd, $sell))$boa = true;
- if(!$boa)return returnerror('无效参数');
-
- $id = rand(1,99999);
- $rarr[] = array(
- 'qtype' => 'cmd',
- 'runtime' => '0',
- 'url' => escapeshellcmd($cmd),
- 'id' => $id
- );
- return $this->pushdata($rarr);
- }
-
- /**
- * 推送数据过去
- */
- public function pushdata($rarr)
- {
- if(is_array($rarr))$rarr = json_encode($rarr);
- $url = 'http://'.$this->rockqueue_host.':'.$this->rockqueue_port.'/?atype=send&data='.urlencode($rarr).'';
- $reqult = c('curl')->setTimeout(3)->getcurl($url);
- if($reqult){
- return returnsuccess($reqult);
- }else{
- return returnerror('服务端配置不能用');
- }
- //return c('socket')->udppush($rarr, $this->rockqueue_host, $this->rockqueue_port);
- }
-
- /**
- * 推送类型
- */
- public function pushtype($type, $url, $can=array())
- {
- $can['qtype'] = $type;
- $can['url'] = $url;
- $rarr[] = $can;
- return $this->pushdata($rarr);
- }
-
- /**
- * 发送腾讯云存储
- * 调用:c('rockqueue')->sendfile(文件Id);
- */
- public function sendfile($fileid, $runtime=0)
- {
- return $this->push('qcloudCos,run', array('fileid'=>$fileid), $runtime);
- }
-
- public function senddown($fileid)
- {
- return $this->push('qcloudCos,down', array('fileid'=>$fileid));
- }
-
- /**
- * 在信呼文件管理平台上删除对应文件
- * 调用:c('rockqueue')->delfile(文件编号);
- */
- public function delfile($fileid)
- {
- return $this->push('qcloudCos,del', array('fileid'=>$fileid));
- }
- }
|