|
|
@@ -0,0 +1,1012 @@
|
|
|
+<?php
|
|
|
+namespace Biz\Common;
|
|
|
+
|
|
|
+class CommonFunction {
|
|
|
+ function checkDebug()
|
|
|
+ {
|
|
|
+ return (isset($_GET['debug']) && intval($_GET['debug'])==-99999) || APP_DEBUG==1?1:0;
|
|
|
+ }
|
|
|
+ function View($Path = "") {
|
|
|
+ if (!$Path) {
|
|
|
+ global $ViewPath;
|
|
|
+ $ViewPath = explode("\\", $ViewPath);
|
|
|
+ $ViewPath[3] = explode("Controller", $ViewPath[3]);
|
|
|
+ $ViewPath[3] = $ViewPath[3][0];
|
|
|
+ return APP_PATH . "/" . $ViewPath[1] . "/View/" . $ViewPath[3] . "/" . $ViewPath[4] . ".blade.php";
|
|
|
+ } else {
|
|
|
+ return APP_PATH . "/" . $Path . ".blade.php";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ function arrayToOptions($data, $key, $val)
|
|
|
+ {
|
|
|
+ $options = array();
|
|
|
+ if (is_array($data) && count($data)) {
|
|
|
+ foreach ($data as $k => $value) {
|
|
|
+ $options[$value[$key]] = $value[$val];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $options;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ function M($TABLE_NAME = "") {
|
|
|
+ return new DB($TABLE_NAME);
|
|
|
+ }
|
|
|
+
|
|
|
+ function checkClose() {
|
|
|
+ if (file_exists(ROOT_PATH . '/Cache/system.lock')) {
|
|
|
+ if (is_mobile()) {
|
|
|
+ return appExec("Mobile", "Weihu", "index");
|
|
|
+ } else {
|
|
|
+ return appExec("home", "weihu", "index");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 发布消息
|
|
|
+ *
|
|
|
+ * @param integer $status
|
|
|
+ * @param string $msg
|
|
|
+ * @param string $data
|
|
|
+ * @return void
|
|
|
+ */
|
|
|
+ function publishNotify($channel, $status = 1, $data = '') {
|
|
|
+ // toLog('publishNotify-'.$channel.'+++'.$data);
|
|
|
+ C()->get('msg')->publish($channel, $data);
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 数组分类排序
|
|
|
+ * @param [array] $columnsArr [需要进行排序的数组]
|
|
|
+ * @param [int] $plmid [所属分类ID]
|
|
|
+ */
|
|
|
+ function getColumns($columnsArr, $plmid) {
|
|
|
+ $menu = array();
|
|
|
+
|
|
|
+ foreach ($columnsArr as $v) {
|
|
|
+ if ($v['plmid'] == $plmid) {
|
|
|
+ $menu[] = $v;
|
|
|
+
|
|
|
+ $a = getColumns($columnsArr, $v['lmid']);
|
|
|
+ foreach ($a as $vv) {
|
|
|
+ $menu[] = $vv;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $menu;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取客户端真实IP
|
|
|
+ */
|
|
|
+ function GETIP() {
|
|
|
+ global $ip;
|
|
|
+
|
|
|
+ if (getenv("HTTP_CLIENT_IP")) {
|
|
|
+ $ip = getenv("HTTP_CLIENT_IP");
|
|
|
+ } else if (getenv("HTTP_X_FORWARDED_FOR")) {
|
|
|
+ $ip = getenv("HTTP_X_FORWARDED_FOR");
|
|
|
+ } else if (getenv("REMOTE_ADDR")) {
|
|
|
+ $ip = getenv("REMOTE_ADDR");
|
|
|
+ } else {
|
|
|
+ $ip = "Unknow";
|
|
|
+ }
|
|
|
+
|
|
|
+ return $ip;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ function dump($data, $exit = 1) {
|
|
|
+ echo "<pre>";
|
|
|
+ print_r($data);
|
|
|
+ echo "</pre>";
|
|
|
+ if ($exit) {
|
|
|
+ exit;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ function OrderID($prefix = '') {
|
|
|
+ $num = mt_rand(100, 999);
|
|
|
+ list($s, $m) = explode(' ', microtime());
|
|
|
+ $order = date("YmdHis") . ($s * 1000000) . $num;
|
|
|
+ return $prefix . $order;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 容器
|
|
|
+ */
|
|
|
+ function C() {
|
|
|
+ static $c = array();
|
|
|
+ if (!isset($c['container'])) {
|
|
|
+ $c['container'] = new \System\Di();
|
|
|
+ }
|
|
|
+ return $c['container'];
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 全局变量快捷操作
|
|
|
+ * @param [type] $key [description]
|
|
|
+ * @param [type] $value [description]
|
|
|
+ */
|
|
|
+ function S($key, $value = null) {
|
|
|
+ if ($value != null) {
|
|
|
+ $GLOBALS[$key] = $value;
|
|
|
+ }
|
|
|
+ if (isset($GLOBALS[$key])) {
|
|
|
+ return $GLOBALS[$key];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 载入模型
|
|
|
+ * @param [type] $name [description]
|
|
|
+ * @param string $proj [description]
|
|
|
+ * @return [type] [description]
|
|
|
+ */
|
|
|
+ function lm($name, $proj = '') {
|
|
|
+ $proj = empty($proj) ? S('CUR_PROJECT') : $proj;
|
|
|
+ if (empty($proj)) {
|
|
|
+ throw new \Exception("项目{$proj}不存在", 1);
|
|
|
+ }
|
|
|
+ $cls = "\\App\\" . ucfirst($proj) . "\\Model\\" . ucfirst($name);
|
|
|
+ if(!class_exists($cls)){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ $key = 'model_' . $name . $proj;
|
|
|
+ C()->shared($key, $cls);
|
|
|
+ return C()->get($key);
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 载入语言包
|
|
|
+ * @param string $key 语言项
|
|
|
+ * @param string $file 语言文件名
|
|
|
+ * @param string $proj 项目名称
|
|
|
+ * @return [type] [description]
|
|
|
+ */
|
|
|
+ function lang($file = '', $proj = '') {
|
|
|
+ $proj = empty($proj) ? S('CUR_PROJECT') : $proj;
|
|
|
+ $file = empty($file) ? S('CUR_CONTROLLER') : $file;
|
|
|
+ $ckey = "Lang_{$proj}_{$file}";
|
|
|
+ if (C()->has($ckey)) {
|
|
|
+ return C()->get($ckey);
|
|
|
+ } else {
|
|
|
+ C()->shared($ckey, function () use ($proj, $file) {
|
|
|
+ $file = ucfirst($file);
|
|
|
+ $proj = ucfirst($proj);
|
|
|
+ $lang = new \System\Lang();
|
|
|
+ $lang_files = array();
|
|
|
+ if (S('CUR_PROJECT') == $proj && S('CUR_CONTROLLER') == $file) {
|
|
|
+ $lang_files[] = ROOT_PATH . "/Application/Commons/Lang/Common.php";
|
|
|
+ $lang_files[] = ROOT_PATH . "/Application/{$proj}/Lang/Common.php";
|
|
|
+ }
|
|
|
+ $lang_files[] = ROOT_PATH . "/Application/{$proj}/Lang/{$file}.php";
|
|
|
+ $data = array();
|
|
|
+ foreach ($lang_files as $v) {
|
|
|
+ if (file_exists($v)) {
|
|
|
+ $data2 = include $v;
|
|
|
+ if (is_array($data2)) {
|
|
|
+ $data = array_merge($data, $data2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $lang->load($data);
|
|
|
+ return $lang;
|
|
|
+ });
|
|
|
+ return C()->get($ckey);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 标签替换
|
|
|
+ *
|
|
|
+ * @param [type] $message
|
|
|
+ * @param array $data
|
|
|
+ * @param string $tag
|
|
|
+ * @return void
|
|
|
+ */
|
|
|
+ function parseTag($message,$data=array(),$tag='#'){
|
|
|
+ if(is_array($data) && count($data)>0){
|
|
|
+ foreach ($data as $k => $v) {
|
|
|
+ $message = str_replace($tag . $k . $tag, $v, $message);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return $message;
|
|
|
+ }
|
|
|
+
|
|
|
+ function appExec($proj, $ctrl, $method, $exec = 0) {
|
|
|
+ $proj = ucfirst($proj);
|
|
|
+ $ctrl = ucfirst($ctrl);
|
|
|
+ $method = ucfirst($method);
|
|
|
+ S('CUR_PROJECT', $proj);
|
|
|
+ S('CUR_CONTROLLER', $ctrl);
|
|
|
+ S('CUR_METHOD', $method);
|
|
|
+ checkPlatform();
|
|
|
+ toDomain();
|
|
|
+ //设置REMOTE_KEY
|
|
|
+ lm('setinfo','commons')->setKey();
|
|
|
+
|
|
|
+ $cls = "\\App\\{$proj}\\Controller\\{$ctrl}";
|
|
|
+ C()->set($ctrl, $cls);
|
|
|
+ $cls = C()->get($ctrl);
|
|
|
+ if (!$cls) {
|
|
|
+ exit("404 NOT FOUND");
|
|
|
+ }
|
|
|
+ if ($exec) {
|
|
|
+ $result = $cls->$method();
|
|
|
+ if (!empty($result)) {
|
|
|
+ Render($result);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (method_exists($cls, $method)) {
|
|
|
+ $result = $cls->$method();
|
|
|
+ if (!empty($result)) {
|
|
|
+ Render($result);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ exit("404 METHOD NOT FOUND");
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * UUID 生成
|
|
|
+ */
|
|
|
+ function UUID() {
|
|
|
+ $prefix = '';
|
|
|
+ $uuid = '';
|
|
|
+ $str = md5(uniqid(mt_rand(), true));
|
|
|
+ $uuid = substr($str, 0, 8) . '-';
|
|
|
+ $uuid .= substr($str, 8, 4) . '-';
|
|
|
+ $uuid .= substr($str, 12, 4) . '-';
|
|
|
+ $uuid .= substr($str, 16, 4) . '-';
|
|
|
+ $uuid .= substr($str, 20, 12);
|
|
|
+ return $prefix . $uuid;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ *密码加密码
|
|
|
+ */
|
|
|
+ function GenEncryption() {
|
|
|
+ srand((double) microtime() * 1000000); //create a random number feed.
|
|
|
+ $ychar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
|
|
|
+ $list = explode(",", $ychar);
|
|
|
+ $authnum = "";
|
|
|
+ for ($i = 0; $i < 6; $i++) {
|
|
|
+ $randnum = rand(0, 61); // 10+26;
|
|
|
+ $authnum .= $list[$randnum];
|
|
|
+ }
|
|
|
+ return $authnum;
|
|
|
+ }
|
|
|
+
|
|
|
+//密码加密
|
|
|
+ function GenPassword($password) {
|
|
|
+ $Enc = GenEncryption();
|
|
|
+ $Pwd = md5(md5($Enc . $password));
|
|
|
+ return array("encryption" => $Enc, "password" => $Pwd);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+//密码验证
|
|
|
+ function VerPassword($identity, $password) {
|
|
|
+ $account = M("account_password")->where("account_identity = '$identity' and", "status = ", '1')->select("encryption,account_password")->find();
|
|
|
+ $VerPwd = md5(md5($account["encryption"] . $password));
|
|
|
+ if ($VerPwd == $account["account_password"]) {
|
|
|
+ unset($account);
|
|
|
+ unset($VerPwd);
|
|
|
+ return true;
|
|
|
+ } else {
|
|
|
+ unset($account);
|
|
|
+ unset($VerPwd);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * Json return
|
|
|
+ * @param string $data [description]
|
|
|
+ * @param string $status [description]
|
|
|
+ * @param string $msg [description]
|
|
|
+ * @param string $method [description]
|
|
|
+ */
|
|
|
+ function JsonReturn($data = "", $status = "200", $msg = "", $method = "") {
|
|
|
+ // header("Content-type:application/json;charset:utf-8");
|
|
|
+ // header('content-type:text/html; charset=utf-8');
|
|
|
+ if(isset($_REQUEST['crossdomain']) && !empty($_REQUEST['crossdomain'])){
|
|
|
+ header("Access-Control-Allow-Origin:{$_REQUEST['crossdomain']}");
|
|
|
+ }else{
|
|
|
+ header("Access-Control-Allow-Origin:*");
|
|
|
+ }
|
|
|
+ header('Access-Control-Allow-Methods:POST,GET,PUT,DELETE,OPTIONS');
|
|
|
+ header('Access-Control-Allow-Credentials:true');
|
|
|
+ $retdata=array("status" => $status, "msg" => $msg, "data" =>$data);
|
|
|
+
|
|
|
+ $devicetype=isset($_REQUEST['devicetype'])?trim($_REQUEST['devicetype']):'';
|
|
|
+ if(!empty($devicetype) && in_array($devicetype,array('ios','android'))){
|
|
|
+ $path=S('CUR_PROJECT').'/'.S('CUR_CONTROLLER').'/'. S('CUR_METHOD');
|
|
|
+ $retdata=C()->get($devicetype."Result")->update($path,$retdata);
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($method == '') {
|
|
|
+ //dump($devicetype);
|
|
|
+ echo (json_encode($retdata,JSON_UNESCAPED_UNICODE));
|
|
|
+ } else {
|
|
|
+ echo ($method . "(" . json_encode($retdata,JSON_UNESCAPED_UNICODE) . ")");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ function XmlReturn($data = "", $status = 200, $msg = '') {
|
|
|
+ // header("Content-type:text/xml;charset:utf-8");
|
|
|
+ $xml = '<?xml version="1.0" encoding="utf-8"?>';
|
|
|
+ $xml .= "<root>";
|
|
|
+ $xml .= '<status>' . $status . '</status>';
|
|
|
+ $xml .= '<msg>' . $msg . '</msg>';
|
|
|
+ $xml .= "<rows>";
|
|
|
+ $xml .= toXml($data);
|
|
|
+ $xml .= "</rows>";
|
|
|
+ $xml .= "</root>";
|
|
|
+ echo($xml);
|
|
|
+ }
|
|
|
+ function toXml($data) {
|
|
|
+ // print_r($data);
|
|
|
+ $xml = '';
|
|
|
+ if (is_array($data) && count($data) > 0) {
|
|
|
+ foreach ($data as $k => $v) {
|
|
|
+ $key = $k;
|
|
|
+ if (is_numeric($k)) {
|
|
|
+ $key = 'data';
|
|
|
+ }
|
|
|
+ if (is_array($v)) {
|
|
|
+ $xml .= "<{$key}>" . toXml($v) . "</{$key}>";
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (is_string($v)) {
|
|
|
+ $xml .= "<{$key}>{$v}</{$key}>";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $xml;
|
|
|
+ }
|
|
|
+
|
|
|
+ function WriteLog($Log) {
|
|
|
+ $logger = new Logger('LOGGS');
|
|
|
+ $logURI = "Cache/log/" . date("Y-m-d-H-i") . ".log";
|
|
|
+ $logger->pushHandler(new StreamHandler($logURI, Logger::DEBUG));
|
|
|
+ $logger->pushHandler(new FirePHPHandler());
|
|
|
+ $logger->addInfo(var_export($Log,1));
|
|
|
+
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 计算当前用时
|
|
|
+ *
|
|
|
+ * @param string $runName
|
|
|
+ * @param integer $return
|
|
|
+ * @return void
|
|
|
+ */
|
|
|
+ function computeTime($runName='',$return=0,$start=1){
|
|
|
+ $curTime= get_millisecond();
|
|
|
+ $numTime=$curTime-(intval($GLOBALS['startTime'])*1000);
|
|
|
+ if($return){
|
|
|
+ return array('curTime'=>$curTime,'numTime'=>$numTime,'runName'=>$runName);
|
|
|
+ }else{
|
|
|
+ echo "<pre>执行{$runName} 功能,当前时间为:{$curTime},累积用时: {$numTime}</pre>";
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ function get_millisecond()
|
|
|
+ {
|
|
|
+ list($usec, $sec) = explode(" ", microtime());
|
|
|
+ $msec = round($usec * 1000);
|
|
|
+ return $sec . $msec;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ function toLog($text, $rewrite = 0) {
|
|
|
+ $data = "=============" . date("Y-m-d H:i", time()) . "==========================================" . chr(13);
|
|
|
+ $data .= var_export($text, 1) . chr(13);
|
|
|
+ $data .= "======================================================================================" . chr(13);
|
|
|
+ $data = iconv('utf-8', 'gb2312', $data);
|
|
|
+ if ($rewrite) {
|
|
|
+ file_put_contents(ROOT_PATH . '/logs.txt', $data);
|
|
|
+ } else {
|
|
|
+ file_put_contents(ROOT_PATH . '/logs.txt', $data, FILE_APPEND);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发送数据到前台,根据请求的数据格式返回相应的数据
|
|
|
+ * @param [type] $data [description]
|
|
|
+ * @param string $status [description]
|
|
|
+ * @param string $msg [description]
|
|
|
+ */
|
|
|
+ function Render($data, $status = "1", $msg = "", $method = '') {
|
|
|
+ $format = S('CUR_RETURN_FORMAT');
|
|
|
+ $msg = empty($msg) ? lang('errors', 'api')->get('error' . $status) : $msg;
|
|
|
+
|
|
|
+ if (empty($format) || $format == 'json') {
|
|
|
+ JsonReturn($data, $status, $msg);
|
|
|
+ }
|
|
|
+ if ($format == 'xml') {
|
|
|
+ XmlReturn($data, $status, $msg);
|
|
|
+ }
|
|
|
+ exit;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ function _beginTransaction() {
|
|
|
+ S('DB')->beginTransaction();
|
|
|
+ }
|
|
|
+ function _rollBack() {
|
|
|
+ S('DB')->rollBack();
|
|
|
+ }
|
|
|
+ function _commit() {
|
|
|
+ S('DB')->commit();
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 服务
|
|
|
+ *
|
|
|
+ * @param string 服务名称
|
|
|
+ * @param array $params
|
|
|
+ * @return void
|
|
|
+ */
|
|
|
+ function SRV($name, $params = array()) {
|
|
|
+ return C()->get($name)->update($params);
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 是否验证token过期
|
|
|
+ *
|
|
|
+ * @return bool
|
|
|
+ */
|
|
|
+ function isCheckToken() {
|
|
|
+ $result = true;
|
|
|
+ $allowMethod = include ROOT_PATH . "/Config/AllowMethod.php";
|
|
|
+ $key = S('CUR_PROJECT') . '/' . S('CUR_CONTROLLER') . '/' . S('CUR_METHOD');
|
|
|
+ if ($allowMethod[$key] == 1) {
|
|
|
+ $result = false;
|
|
|
+ }
|
|
|
+ return $result;
|
|
|
+ }
|
|
|
+ function checkPlatform(){
|
|
|
+
|
|
|
+ if(isset($_GET['platform'])){
|
|
|
+ $_SESSION['platform']=$_GET['platform']=='wap'?1:0;
|
|
|
+ }
|
|
|
+ if(isset($_GET['clearPlatform']) && intval($_GET['clearPlatform'])==1){
|
|
|
+ $_SESSION['platform']=null;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ function is_mobile() {
|
|
|
+ if(isset($_SESSION['platform']) && $mobile=intval($_SESSION['platform'])>0 ){
|
|
|
+ return $mobile==1?true:false;
|
|
|
+ }
|
|
|
+ $user_agent = $_SERVER['HTTP_USER_AGENT'];
|
|
|
+ $mobile_agents = Array("240x320", "acer", "acoon", "acs-", "abacho", "ahong", "airness", "alcatel", "amoi", "android", "anywhereyougo.com", "applewebkit/525", "applewebkit/532", "asus", "audio", "au-mic", "avantogo", "becker", "benq", "bilbo", "bird", "blackberry", "blazer", "bleu", "cdm-", "compal", "coolpad", "danger", "dbtel", "dopod", "elaine", "eric", "etouch", "fly ", "fly_", "fly-", "go.web", "goodaccess", "gradiente", "grundig", "haier", "hedy", "hitachi", "htc", "huawei", "hutchison", "inno", "ipad", "ipaq", "ipod", "jbrowser", "kddi", "kgt", "kwc", "lenovo", "lg ", "lg2", "lg3", "lg4", "lg5", "lg7", "lg8", "lg9", "lg-", "lge-", "lge9", "longcos", "maemo", "mercator", "meridian", "micromax", "midp", "mini", "mitsu", "mmm", "mmp", "mobi", "mot-", "moto", "nec-", "netfront", "newgen", "nexian", "nf-browser", "nintendo", "nitro", "nokia", "nook", "novarra", "obigo", "palm", "panasonic", "pantech", "philips", "phone", "pg-", "playstation", "pocket", "pt-", "qc-", "qtek", "rover", "sagem", "sama", "samu", "sanyo", "samsung", "sch-", "scooter", "sec-", "sendo", "sgh-", "sharp", "siemens", "sie-", "softbank", "sony", "spice", "sprint", "spv", "symbian", "tablet", "talkabout", "tcl-", "teleca", "telit", "tianyu", "tim-", "toshiba", "tsm", "up.browser", "utec", "utstar", "verykool", "virgin", "vk-", "voda", "voxtel", "vx", "wap", "wellco", "wig browser", "wii", "windows ce", "wireless", "xda", "xde", "zte");
|
|
|
+ $is_mobile = false;
|
|
|
+ foreach ($mobile_agents as $device) {
|
|
|
+ if (stristr($user_agent, $device)) {
|
|
|
+ $is_mobile = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $is_mobile;
|
|
|
+ }
|
|
|
+
|
|
|
+ function toDomain() {
|
|
|
+
|
|
|
+ $domain = $_SERVER['HTTP_HOST'];
|
|
|
+ $config = include ROOT_PATH . '/Config/Domain.php';
|
|
|
+ $is_mobile = is_mobile();
|
|
|
+ $curDomain = $old_domain = $domain;
|
|
|
+ if (is_array($config) && count($config) > 0) {
|
|
|
+ $domains = array();
|
|
|
+ $domains[] = $domain;
|
|
|
+ if ($is_mobile) {
|
|
|
+ $domains[] = str_replace('www.', 'm.', $domain);
|
|
|
+ $domains[] = 'm.' . $domain;
|
|
|
+ } else {
|
|
|
+ $domains[] = str_replace('m.', '', $domain);
|
|
|
+ $domains[] = str_replace('m.', 'www.', $domain);
|
|
|
+ }
|
|
|
+ foreach ($domains as $key => $value) {
|
|
|
+ if (isset($config[$value])) {
|
|
|
+ $v = $config[$value];
|
|
|
+ if ($v == 'pay') {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if ($is_mobile) {
|
|
|
+ if ($v == 'pc') {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if ($v != 'pc') {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ $curDomain = $value;
|
|
|
+ // $_SESSION['domain']=$value;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // echo $curDomain;
|
|
|
+ if ($is_mobile) {
|
|
|
+ if (S('CUR_PROJECT') == 'Home') {
|
|
|
+ header("Location:http://" . $curDomain . "/m");
|
|
|
+ //header("Location:http://" . $curDomain . "/mobile-index/index");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (S('CUR_PROJECT') == 'Mobile') {
|
|
|
+ header("Location:http://" . $curDomain . "/home-index/index");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 数据签名认证
|
|
|
+ * @param array $data 被认证的数据
|
|
|
+ * @return string 签名
|
|
|
+ */
|
|
|
+ function data_auth_sign($data) {
|
|
|
+ //数据类型检测
|
|
|
+ if (!is_array($data)) {
|
|
|
+ $data = (array) $data;
|
|
|
+ }
|
|
|
+ ksort($data); //排序
|
|
|
+ $code = http_build_query($data); //url编码并生成query字符串
|
|
|
+ $sign = sha1($code); //生成签名
|
|
|
+ return $sign;
|
|
|
+ }
|
|
|
+ /*
|
|
|
+ * 判断用户是否登录
|
|
|
+ * */
|
|
|
+ function isLogin($str = '',$type='agent') {
|
|
|
+ $session = $_SESSION[$type.'Info'];
|
|
|
+ if(empty($session)){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ if($type=='agent'){
|
|
|
+ if($str=='name'){
|
|
|
+ return $session['agent_user'];
|
|
|
+ }
|
|
|
+ if($str=='uid'){
|
|
|
+ return $session['user_identity'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ function jump($url){
|
|
|
+ header('Location:'.$url);
|
|
|
+ }
|
|
|
+
|
|
|
+//手机中间星号
|
|
|
+ function phoneHide($phone)
|
|
|
+ {
|
|
|
+ if (!empty($phone)) {
|
|
|
+ $phone = substr_replace($phone, '****', 3, 4);
|
|
|
+ }
|
|
|
+ return $phone;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param $game_code 球类代码
|
|
|
+ * @param int $isJoin 是否用于join
|
|
|
+ * @return array
|
|
|
+ * @throws Exception
|
|
|
+ * 根据球类代码 定义相关model
|
|
|
+ */
|
|
|
+ function getModels($game_code,$isJoin=1){
|
|
|
+ $game_type = lm('GameType', 'Sports')->where('game_code',$game_code)->select('game_code')->first();
|
|
|
+ // 获取不同球类model
|
|
|
+ if($isJoin == 1){
|
|
|
+ switch ($game_type->game_code){
|
|
|
+ case 'zq':
|
|
|
+ $model_league = 'st_zq_league';
|
|
|
+ $model_match = 'st_zq_competition';
|
|
|
+ $model_odds = 'st_zq_odds';
|
|
|
+ $model_odds_record = 'st_zq_odds_record';
|
|
|
+ $model_result = 'st_zq_result';
|
|
|
+
|
|
|
+ break;
|
|
|
+ case 'lq':
|
|
|
+ $model_league = 'st_lq_league';
|
|
|
+ $model_match = 'st_lq_competition';
|
|
|
+ $model_odds = 'st_lq_odds';
|
|
|
+ $model_odds_record = 'st_lq_odds_record';
|
|
|
+ $model_result = 'st_lq_result';
|
|
|
+ break;
|
|
|
+ case 'wq':
|
|
|
+ $model_league = 'st_wq_league';
|
|
|
+ $model_match = 'st_wq_competition';
|
|
|
+ $model_odds = 'st_wq_odds';
|
|
|
+ $model_odds_record = 'st_wq_odds_record';
|
|
|
+ $model_result = 'st_wq_result';
|
|
|
+ break;
|
|
|
+ case 'bq':
|
|
|
+ $model_league = 'st_bq_league';
|
|
|
+ $model_match = 'st_bq_competition';
|
|
|
+ $model_odds = 'st_bq_odds';
|
|
|
+ $model_odds_record = 'st_bq_odds_record';
|
|
|
+ $model_result = 'st_bq_result';
|
|
|
+ break;
|
|
|
+ case 'gj':
|
|
|
+ $model_league = 'st_zq_league';
|
|
|
+ $model_match = 'st_zq_competition';
|
|
|
+ $model_odds = 'st_zq_odds';
|
|
|
+ $model_result = 'st_zq_result';
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ throw new \Exception(Render([], '10002', lang('Tips','Sports')->get('PARAM_ERROR')));
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ switch ($game_type->game_code){
|
|
|
+ case 'zq':
|
|
|
+ $model_league = 'st_zq_league';
|
|
|
+ $model_match = 'st_zq_competition';
|
|
|
+ $model_odds = 'st_zq_odds';
|
|
|
+ $model_result = 'SoccerResult';
|
|
|
+ break;
|
|
|
+ case 'lq':
|
|
|
+ $model_league = 'st_lq_league';
|
|
|
+ $model_match = 'st_lq_competition';
|
|
|
+ $model_odds = 'st_lq_odds';
|
|
|
+ $model_result = 'BasketballResult';
|
|
|
+ break;
|
|
|
+ case 'wq':
|
|
|
+ $model_league = 'st_wq_league';
|
|
|
+ $model_match = 'st_wq_competition';
|
|
|
+ $model_odds = 'st_wq_odds';
|
|
|
+ $model_result = 'TennisResult';
|
|
|
+ break;
|
|
|
+ case 'bq':
|
|
|
+ $model_league = 'st_bq_league';
|
|
|
+ $model_match = 'st_bq_competition';
|
|
|
+ $model_odds = 'st_bq_odds';
|
|
|
+ $model_result = 'BaseballResult';
|
|
|
+ break;
|
|
|
+ case 'gj':
|
|
|
+ $model_league = 'st_zq_league';
|
|
|
+ $model_match = 'st_zq_competition';
|
|
|
+ $model_odds = 'st_zq_odds';
|
|
|
+ $model_result = 'SoccerResult';
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ throw new \Exception(Render([], '10002', lang('Tips','Sports')->get('PARAM_ERROR')));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ $data = [
|
|
|
+ 'model_league'=>$model_league,
|
|
|
+ 'model_match'=>$model_match,
|
|
|
+ 'model_odds'=>$model_odds,
|
|
|
+ 'model_result' =>$model_result,
|
|
|
+ 'model_odds_record' => $model_odds_record
|
|
|
+ ];
|
|
|
+ return $data;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param $type_code
|
|
|
+ * @return array
|
|
|
+ * @throws \Exception
|
|
|
+ * 获取不同状态下的 查询条件
|
|
|
+ */
|
|
|
+ function getState($type_code,$model_match = ''){
|
|
|
+ if($model_match == ''){
|
|
|
+ switch ($type_code){
|
|
|
+ case 'StRollBall'://滚球 正在进行
|
|
|
+ $where = [
|
|
|
+ ['is_rollball','=',1],
|
|
|
+ ['match_date','=',date("Y-m-d")],
|
|
|
+ ['match_time','>',date("H:i:s", time()-(90*60))],
|
|
|
+ ['match_time','<',date("H:i:s", time())]
|
|
|
+ ];
|
|
|
+ break;
|
|
|
+ case 'StSoon'://即将 今日两小时内开始
|
|
|
+ $where = [
|
|
|
+ ['status','=','0'],
|
|
|
+ ['match_date','=',date("Y-m-d")],
|
|
|
+ ['match_time','<',date("H:i:s", strtotime("+2 hour"))],
|
|
|
+ ['match_time','>',date("H:i:s", time())]
|
|
|
+
|
|
|
+// ['utime','>',date("Y-m-d").' 00:00:00']
|
|
|
+ ];
|
|
|
+ break;
|
|
|
+ case 'StToday'://今日 今日未开始未结束
|
|
|
+ $where = [
|
|
|
+ ['is_today', '=', 1],
|
|
|
+
|
|
|
+// ['type', '=', '1'],
|
|
|
+// ['status', '<', '2'],
|
|
|
+ ['match_date','=',date("Y-m-d")],
|
|
|
+ ['match_time','>',date("H:i:s", time())],
|
|
|
+// ['utime','>',date("Y-m-d").' 00:00:00']
|
|
|
+ ];
|
|
|
+ break;
|
|
|
+ case 'StMorningPlate'://早盘
|
|
|
+ $where = [
|
|
|
+ ['is_morningplate', '=', 1],
|
|
|
+ ['us_time','>',qgmdate('Y-m-d H:i:s', '', -4)],
|
|
|
+// ['match_date','>',date("Y-m-d",time())],
|
|
|
+// ['match_time','>',date("H:i:s", time())],
|
|
|
+// ['type', '=', '2'],
|
|
|
+// ['status', '<', '2'],
|
|
|
+// ['utime','>',date("Y-m-d").' 00:00:00']
|
|
|
+ ];
|
|
|
+ break;
|
|
|
+ case 'StStringScene'://串场
|
|
|
+ $where = [
|
|
|
+ ['is_stringscene', '=', 1],
|
|
|
+ ['us_time','>',qgmdate('Y-m-d H:i:s', '', -4)],
|
|
|
+
|
|
|
+// ['match_date','>',date("Y-m-d",time())],
|
|
|
+// ['match_time','>',date("H:i:s", time())],
|
|
|
+// ['type', '=', '3'],
|
|
|
+// ['status', '<', '2'],
|
|
|
+// ['utime','>',date("Y-m-d").' 00:00:00']
|
|
|
+ ];
|
|
|
+ break;
|
|
|
+ case 'StChampion'://冠军
|
|
|
+ $where = [
|
|
|
+ 'type'=>1
|
|
|
+ ];
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ throw new \Exception(Render([], '10002', lang('Tips','Sports')->get('PARAM_ERROR')));
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ switch ($type_code){
|
|
|
+ case 'StRollBall'://滚球 正在进行
|
|
|
+ $where = [
|
|
|
+ [$model_match.'.is_rollball','=',1],
|
|
|
+ [$model_match.'.match_date','=',date("Y-m-d")],
|
|
|
+ [$model_match.'.match_time','>',date("H:i:s", time()-(90*60))],
|
|
|
+ [$model_match.'.match_time','<',date("H:i:s", time())]
|
|
|
+ ];
|
|
|
+ break;
|
|
|
+ case 'StSoon'://即将 今日两小时内开始
|
|
|
+ $where = [
|
|
|
+ [$model_match.'.status','=','0'],
|
|
|
+ [$model_match.'.match_date','=',date("Y-m-d")],
|
|
|
+ [$model_match.'.match_time','<',date("H:i:s", strtotime("+2 hour"))],
|
|
|
+ [$model_match.'.match_time','>',date("H:i:s", time())]
|
|
|
+// [$model_match.'.utime','>',date("Y-m-d").' 00:00:00']
|
|
|
+ ];
|
|
|
+ break;
|
|
|
+ case 'StToday'://今日 今日未开始未结束
|
|
|
+ $where = [
|
|
|
+ [$model_match.'.is_today','=',1],
|
|
|
+// [$model_match.'.type', '=', '1'],
|
|
|
+// [$model_match.'.status', '<', '2'],
|
|
|
+ [$model_match.'.match_date','=',date("Y-m-d")],
|
|
|
+ [$model_match.'.match_time','>',date("H:i:s", time())],
|
|
|
+// [$model_match.'.utime','>',date("Y-m-d").' 00:00:00']
|
|
|
+ ];
|
|
|
+ break;
|
|
|
+ case 'all'://所有赛事
|
|
|
+ $where = [
|
|
|
+ [$model_match.'.status', '<', '2'],
|
|
|
+ ];
|
|
|
+ break;
|
|
|
+ case 'StMorningPlate'://早盘
|
|
|
+ $where = [
|
|
|
+ [$model_match.'.is_morningplate','=',1],
|
|
|
+ [$model_match.'.us_time','>',qgmdate('Y-m-d H:i:s', '', -4)],
|
|
|
+// [$model_match.'.match_date','>',date("Y-m-d",time())],
|
|
|
+// [$model_match.'.match_time','>',date("H:i:s", time())],
|
|
|
+// [$model_match.'.type', '=', '2'],
|
|
|
+// [$model_match.'.status', '<', '2'],
|
|
|
+// [$model_match.'.utime','>',date("Y-m-d").' 00:00:00']
|
|
|
+ ];
|
|
|
+ break;
|
|
|
+ case 'StStringScene'://串场 查询串场状态为1 开赛时间大于当前时间
|
|
|
+ $where = [
|
|
|
+ [$model_match.'.is_stringscene','=',1],
|
|
|
+ [$model_match.'.us_time','>',qgmdate('Y-m-d H:i:s', '', -4)],
|
|
|
+
|
|
|
+// [$model_match.'.match_date','>',date("Y-m-d",time())],
|
|
|
+// [$model_match.'.match_time','>',date("H:i:s", time())],
|
|
|
+// [$model_match.'.type', '=', '3'],
|
|
|
+// [$model_match.'.status', '<', '2'],
|
|
|
+// [$model_match.'.utime','>',date("Y-m-d").' 00:00:00']
|
|
|
+ ];
|
|
|
+ break;
|
|
|
+ case 'StChampion'://冠军
|
|
|
+ $where = [
|
|
|
+ 'type'=>1
|
|
|
+ ];
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ throw new \Exception(Render([], '10002', lang('Tips','Sports')->get('PARAM_ERROR')));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return $where;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param $data
|
|
|
+ * @return array
|
|
|
+ * 处理当国家下无联赛数据 删除该数组
|
|
|
+ */
|
|
|
+ function handleArr($data){
|
|
|
+ $hData = [];
|
|
|
+ foreach ($data as $key =>$v){
|
|
|
+ if(empty($v['league_count'])){
|
|
|
+ $v = [];
|
|
|
+ }
|
|
|
+ $hData[]=$v;
|
|
|
+ }
|
|
|
+ foreach($hData as $k=>$v){
|
|
|
+ if(empty($v)){
|
|
|
+ unset($hData[$k]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ foreach ($hData as $k=>$v){
|
|
|
+ $v['league_count'] = array_values($v['league_count']);
|
|
|
+ $hData[$k]=$v;
|
|
|
+ }
|
|
|
+
|
|
|
+ return array_values($hData);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param $arr
|
|
|
+ * @param $key
|
|
|
+ * @return array
|
|
|
+ * 去除二维数组重复项
|
|
|
+ */
|
|
|
+ function array_unset_tt($arr,$key){
|
|
|
+ //建立一个目标数组
|
|
|
+ $res = array();
|
|
|
+ foreach ($arr as $value) {
|
|
|
+ //查看有没有重复项
|
|
|
+ if(isset($res[$value[$key]])){
|
|
|
+ unset($value[$key]); //有:销毁
|
|
|
+ }else{
|
|
|
+ $res[$value[$key]] = $value;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $res;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理冠军盘口 数组结构
|
|
|
+ */
|
|
|
+ function array_gj_tt($data,$oddsData){
|
|
|
+ foreach ($data as $k=>&$v){
|
|
|
+ foreach ($v['league_count'] as $kk=>&$vv){
|
|
|
+ foreach ($oddsData as $kkk=>$vvv){
|
|
|
+ if($vv['lg_id'] == $vvv['lg_id']){
|
|
|
+ $vv['oddsData'][]=$vvv;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if($vv['oddsData']){
|
|
|
+ $vv['oddsData'] = array_unset_tt($vv['oddsData'],'p_code');
|
|
|
+ $vv['count'] = count($vv['oddsData']);
|
|
|
+ unset($vv['oddsData']);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(count($vv) == 5){
|
|
|
+ unset($v['league_count'][$kk]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $v['league_count'] = array_values($v['league_count']);
|
|
|
+ if(empty($v['league_count'])){
|
|
|
+ unset($data[$k]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return array_values($data);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 时间格式化
|
|
|
+ * @param string $dateformat 时间格式
|
|
|
+ * @param int $timestamp 时间戳
|
|
|
+ * @param int $timeoffset 时区偏差 默认8 北京时间 -4美东时间
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
+ function qgmdate($dateformat = 'Y-m-d H:i:s', $timestamp = '', $timeoffset = 8) {
|
|
|
+ if(empty($timestamp)) {
|
|
|
+ $timestamp = time();
|
|
|
+ }
|
|
|
+ $result = gmdate($dateformat, $timestamp + $timeoffset * 3600);
|
|
|
+ return $result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断二维数组是否包含一维数组
|
|
|
+ * @param mixed $arr 查询条件
|
|
|
+ * @param mixed $arrs 运动类型
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
+ function judgeEqual($arr, $arrs){
|
|
|
+ foreach ($arrs as $value) {
|
|
|
+ if (count($value) === count($arr)) {
|
|
|
+ $a = 0;
|
|
|
+ foreach ($value as $key => $v) {
|
|
|
+ $a++;
|
|
|
+ if ($v != $arr[$key]) {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ if ($a == count($key)) { // 到最后一个元素都没有出现不相等,就说明这两个数组相等。
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+// 排列
|
|
|
+ function arrangement($a, $m) {
|
|
|
+ $r = array();
|
|
|
+
|
|
|
+ $n = count($a);
|
|
|
+ if ($m <= 0 || $m > $n) {
|
|
|
+ return $r;
|
|
|
+ }
|
|
|
+
|
|
|
+ for ($i=0; $i<$n; $i++) {
|
|
|
+ $b = $a;
|
|
|
+ $t = array_splice($b, $i, 1);
|
|
|
+ if ($m == 1) {
|
|
|
+ $r[] = $t;
|
|
|
+ } else {
|
|
|
+ $c = arrangement($b, $m-1);
|
|
|
+ foreach ($c as $v) {
|
|
|
+ $r[] = array_merge($t, $v);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return $r;
|
|
|
+ }
|
|
|
+
|
|
|
+// 组合
|
|
|
+ function combination($a, $m) {
|
|
|
+ $r = array();
|
|
|
+
|
|
|
+ $n = count($a);
|
|
|
+ if ($m <= 0 || $m > $n) {
|
|
|
+ return $r;
|
|
|
+ }
|
|
|
+
|
|
|
+ for ($i=0; $i<$n; $i++) {
|
|
|
+ $t = array($a[$i]);
|
|
|
+ if ($m == 1) {
|
|
|
+ $r[] = $t;
|
|
|
+ } else {
|
|
|
+ $b = array_slice($a, $i+1);
|
|
|
+ $c = combination($b, $m-1);
|
|
|
+ foreach ($c as $v) {
|
|
|
+ $r[] = array_merge($t, $v);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return $r;
|
|
|
+ }
|
|
|
+
|
|
|
+// 阶乘
|
|
|
+ function factorial($n) {
|
|
|
+ return array_product(range(1, $n));
|
|
|
+ }
|
|
|
+
|
|
|
+// 排列数
|
|
|
+ function A1($n, $m) {
|
|
|
+ return factorial($n)/factorial($n-$m);
|
|
|
+ }
|
|
|
+
|
|
|
+// 组合数
|
|
|
+ function C1($n, $m) {
|
|
|
+ return A1($n, $m)/factorial($m);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+?>
|