Keine Beschreibung

SaeTaskQueue.class.php 3.5KB

    <?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK IT ] // +---------------------------------------------------------------------- // | Copyright (c) 2010 http://thinkphp.cn All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: luofei614 <www.3g4k.com> // +---------------------------------------------------------------------- // $Id: SaeTaskQueue.class.php 2766 2012-02-20 15:58:21Z luofei614@gmail.com $ /** *任务列队 *本地环境暂时需要支持curl才行。 */ class SaeTaskQueue extends SaeObject{ public $queue=array(); //添加列队 public function addTask($tasks,$postdata=null,$prior=false,$options=array()){ if ( is_string($tasks) ) { if ( !filter_var($tasks, FILTER_VALIDATE_URL) ) { $this->errno = SAE_ErrParameter; $this->errmsg = Imit_L("_SAE_ERRPARAMTER_"); return false; } //添加单条任务 $item = array(); $item['url'] = $tasks; if ($postdata != NULL) $item['postdata'] = $postdata; if ($prior) $item['prior'] = true; $tasks=$item; } if ( empty($tasks) ) { $this->errno = SAE_ErrParameter; $this->errmsg = Imit_L("_SAE_ERRPARAMTER_"); return false; } //记录任务,处理优先 foreach($tasks as $k => $v) { if (is_array($v) && isset($v['url'])) { //当是二维数组时 if($v['prior']){ $this->queue=array_merge(array($v),$this->queue); }else{ $this->queue[]=$v; } } elseif ( isset($tasks['url']) ) { //当是一维数组时 if($tasks['prior']){ $this->queue=array_merge(array($tasks),$this->queue); }else{ $this->queue[]=$tasks; } break; } else { $this->errno = SAE_ErrParameter; $this->errmsg = Imit_L("_SAE_ERRPARAMTER_"); return false; } } return true; } public function curLength(){ return true; } public function leftLength(){ return true; } public function push(){ //todu, 当用户环境不支持curl时用socket发送。 if(empty($this->queue)) return false; $s = curl_init(); foreach($this->queue as $k=>$v){ curl_setopt($s,CURLOPT_URL,$v['url']); //curl_setopt($s,CURLOPT_TIMEOUT,5); curl_setopt($s,CURLOPT_RETURNTRANSFER,true); curl_setopt($s,CURLOPT_HEADER, 1); curl_setopt($s,CURLINFO_HEADER_OUT, true); curl_setopt($s,CURLOPT_POST,true); curl_setopt($s,CURLOPT_POSTFIELDS,$v['postdata']); $ret = curl_exec($s); $info = curl_getinfo($s); // print_r($info); if(empty($info['http_code'])) { $this->errno = SAE_ErrInternal; $this->errmsg = Imit_L("_SAE_TASKQUEUE_SERVICE_FAULT_"); return false; } else if($info['http_code'] != 200) { $this->errno = SAE_ErrInternal; $this->errmsg = Imit_L("_SAE_TASKQUEUE_SERVICE_ERROR_"); return false; } else { //todu 这里好像有些问题 if($info['size_download'] == 0) { // get MailError header $this->errno = SAE_ErrUnknown; $this->errmsg = Imit_L("_SAE_UNKNOWN_ERROR_"); return false; } } } //循环结束 $this->queue=array();//清空列队 return true; } } ?>