ip(); $to_ken=$request->domain().self::$seperater.$ip.self::$seperater.time().self::$seperater.(time()+$valid_peroid).self::$seperater; $token=self::enCode($to_ken); return $token; } private static function getRet($msg,$code=400){ return ['msg'=>$msg,'code'=>$code]; } /** * * @param string $url * @param array $post_data */ public static function start(){ $pach=APP_PATH.'version.php'; $request=Request::instance(); if(!file_exists($pach)) return self::getRet($pach.'升级文件丢失,请联系管理员'); $version=@file($pach); if(!isset($version[0])) return self::getRet('获取失败'); $lv=self::request_post(self::$isNowVersionUrl,['token'=>self::get_token()]); if(isset($lv['code']) && $lv['code']==200) $version_lv=isset($lv['data']['version']) && $lv['data']['version'] ? $lv['data']['version'] : false; else return isset($lv['msg'])?self::getRet($lv['msg']):self::getRet('获取失败'); if($version_lv===false) return self::getRet('获取失败'); if(strstr($version[0],'=')!==false){ $version=explode('=',$version[0]); if($version[1]!=$version_lv){ return self::getRet($version_lv,200); } } return self::getRet('获取失败'); } public static function getVersion(){ $pach = APP_PATH.'version.php'; if(!file_exists($pach)) return self::getRet($pach.'升级文件丢失,请联系管理员'); $version=@file($pach); if(!isset($version[0]) && !isset($version[1])) return self::getRet('获取失败'); $arr=[]; foreach ($version as $val){ list($k,$v)=explode('=',$val); $arr[$k]=$v; } return self::getRet($arr,200); } /** * 模拟post进行url请求 * @param string $url * @param array $post_data */ public static function request_post($url = '', $post_data = array()) { if(strstr($url,'http')===false) $url=self::$domain.$url; if (empty($url)){ return false; } if(!isset($post_data['token'])) $post_data['token']=self::get_token(); $o = ""; foreach ( $post_data as $k => $v ) { $o.= "$k=" . urlencode( $v ). "&" ; } $post_data = substr($o,0,-1); $postUrl = $url; $curlPost = $post_data; $ch = curl_init();//初始化curl curl_setopt($ch, CURLOPT_URL,$postUrl);//抓取指定网页 curl_setopt($ch, CURLOPT_HEADER, 0);//设置header curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上 curl_setopt($ch, CURLOPT_POST, 1);//post提交方式 curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); curl_setopt($ch, CURLOPT_TIMEOUT,20); $data = curl_exec($ch);//运行curl curl_close($ch); if($data){ $data=json_decode($data,true); } return $data; } /** * 验证远程文件是否存在 以及下载 * @param string $url 文件路径 * @param string $savefile 保存地址 */ public static function check_remote_file_exists($url,$savefile) { $url=self::$domain.'public'.DS.'uploads'.DS.'upgrade'.DS.$url; $url = str_replace('\\','/',$url); $curl = curl_init($url); curl_setopt($curl, CURLOPT_NOBODY, true); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'GET'); // 发送请求 $result = curl_exec($curl); $found = false; // 如果请求没有发送失败 if ($result !== false) { // 再检查http响应码是否为200 $statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($statusCode == 200) { curl_close($curl); $fileservice=new self; //下载文件 $zip=$fileservice->down_remote_file($url,$savefile); if($zip['error']>0) return false; if(!isset($zip['save_path']) && empty($zip['save_path'])) return false; if(!file_exists($zip['save_path'])) return false; return $zip['save_path']; } } curl_close($curl); return $found; } /** * 通用加密 * @param String $string 需要加密的字串 * @param String $skey 加密EKY * @return String */ private static function enCode($string = '', $skey = 'fb') { $skey = array_reverse(str_split($skey)); $strArr = str_split(base64_encode($string)); $strCount = count($strArr); foreach ($skey as $key => $value) { $key < $strCount && $strArr[$key].=$value; } return str_replace('=', 'O0O0O', join('', $strArr)); } /** * 去除回车,去取空格,去除换行,去除tab * @param String $str 需要去除的字串 * @return String */ public static function replace($str){ return trim(str_replace(array("\r", "\n", "\t"), '',$str)); } }