PHP - 常用函数库

<?php
/**
 * 常用函数库
 *
 */
class Core_Fun
{
    /**
     * 对变量进行反转义到原始数据
     *
     * @param string|array $param 需要反转义的原始数据
     * @return string|array
     * @author Icehu
     */
    public static function stripslashes($param)
    {
        if (is_array($param))
        {
            foreach ($param as $k => $v)
            {
                $param[$k] = self::stripslashes($v);
            }
            return $param;
        }
        else
        {
            return stripslashes($param);
        }
    }
    /**
     * 字符转码方法
     * @param string $in_charst 输入字符集
     * @param string $out_charset 输出字符集
     * @param string|array $param 转换数据
     * @return string|array
     * @author Icehu
     */
    public static function iconv($in_charst, $out_charset, $param)
    {
        if (is_array($param))
        {
            foreach ($param as $_key => $_var)
            {
                $param[$_key] = self::iconv($in_charst, $out_charset, $_var);
            }
            return $param;
        }
        else
        {
            if (function_exists('iconv'))
            {
                return @iconv($in_charst, $out_charset, $param);
            }
            elseif (function_exists('mb_convert_encoding'))
            {
                return @mb_convert_encoding($param, $out_charset, $in_charst);
            }
            else
            {
                return $param;
            }
        }
    }
    /**
     * 获取上一次访问的地址
     *
     * @return string
     * @author Icehu
     * @todo 考虑登陆、退出地址、SEO转换等问题
     */
    public static function getreffer()
    {
        return $_SERVER['HTTP_REFERER'];
    }
    /**
     * 设置Cookie
     *
     * @param string $name Cookie名称
     * @param string $value Cookie值
     * @param number $kptime Cookie有效期
     * @param bool $httponly 是否httponly
     * @author Icehu
     */
    public static function setcookie($name, $value=null, $kptime=0, $httponly=false)
    {
        $cookie_pre = Core_Config::get('cookiepre', 'basic', 't_');
        $domain = Core_Config::get('cookiedomain', 'basic', null);
        if (null !== $value)
        {
            if ($kptime)
            {
                setcookie($cookie_pre . $name, $value, self::time() + $kptime, '/', $domain, $_SERVER['SERVER_PORT'] == 443 ? 1 : 0, $httponly);
            }
            else
            {
                setcookie($cookie_pre . $name, $value, null, '/', $domain, $_SERVER['SERVER_PORT'] == 443 ? 1 : 0, $httponly);
            }
        }
        else
        {
            //drop
            setcookie($cookie_pre . $name, '', self::time() - 3600, '/', $domain, $_SERVER['SERVER_PORT'] == 443 ? 1 : 0);
        }
    }
    /**
     * 获取Cookie的值
     * @param string $name
     * @return string
     * @author Icehu
     */
    public static function getcookie($name)
    {
        $cookie_pre = Core_Config::get('cookiepre', 'basic', 't_');
        return @$_COOKIE[$cookie_pre . $name];
    }
    /**
     * 获取脚本运行时间
     *
     * @return number
     * @author Icehu
     */
    public static function time()
    {
        if (!isset($_SERVER['REQUEST_TIME']))
        {
            $_SERVER['REQUEST_TIME'] = time();
        }
        $timemodify = Core_Config::get('timemodify', 'basic',0);
        return $_SERVER['REQUEST_TIME'] + intval($timemodify);
    }
    /**
     * 获取当前脚本执行的微秒时间
     * @return float
     * @author Icehu
     */
    public static function microtime()
    {
        return microtime(true);
    }
    /**
     * 获取客户端IP
     * 目前是取带来IP,是否取真实IP?如果取真实IP,可能被伪造
     * @return string
     * @author Icehu
     * @todo 取真实IP?
     */
    public static function ip()
    {
        if (isset($_SERVER['REMOTE_ADDR']))
        {
            return $_SERVER['REMOTE_ADDR'];
        }
        else if ($_tmp = getenv('REMOTE_ADDR'))
        {
            return $_tmp;
        }
        return 'unknow';
    }
    /**
     * 考虑系统配置时区的时间格式化方法
     * 默认 +8 时区
     *
     * @param string $format 格式化时间的字符串,同date方法
     * @param number $timestamp 时间戳
     * @return string
     * @author Icehu
     */
    public static function date($format, $timestamp=null)
    {
        $timestamp = (null == $timestamp) ? self::time() : $timestamp;
        $timezone = Core_Config::get('timezone', 'basic', 8);
        return gmdate($format, $timestamp + $timezone * 3600);
    }
    /**
     * 考虑了系统设置时区的时间戳生成方法
     *
     * @param number $hour 小时
     * @param number $min 分钟
     * @param number $sec 秒钟
     * @param number $mon 月份
     * @param number $year 年份
     * @param number $day 日期
     * @return timestamp
     * @author Icehu
     */
    public static function mktime($hour, $min, $sec, $mon, $year, $day)
    {
        $timezone = Core_Config::get('timezone', 'basic', 8);
        $t = gmmktime($hour, $min, $sec, $mon, $day, $year);
        return $t ? $t - $timezone * 3600 : 0;
    }
    /**
     * 将 yyyy-mm-dd H:i:s 格式的时间格式化成时间戳
     * @param string $str
     * @return timestamp
     * @author Icehu
     */
    public static function strtotime($str)
    {
        $str = str_replace(array(' ', ':'), '-', trim($str));
        $a = explode('-', $str);
        @list($year, $mon, $day, $hour, $min, $sec) = $a;
        return self::mktime($hour, $min, $sec, $mon, $year, $day);
    }
    /**
     * 将数组转换为JSON格式
     * 所有格式的数组都将转换为json对象,而不会转换为js array
     *
     * @param array $array
     * @param bool $_s
     * @return string
     * @author Icehu
     */
    public static function array2json($array=array(), $_s = false)
    {
        $r = array();
        foreach ((array) $array as $key => $val)
        {
            if (is_array($val))
            {
                $r[$key] = "\"$key\": " . self::array2json($val, $_s);
            }
            else
            {
                if ($_s && $key == '_s')
                {
                    $r[$key] = "\"$key\": " . $val;
                }
                else
                {
                    if (is_numeric($val))
                    {
                        $r[$key] = "\"$key\": " . $val;
                    }
                    else if (is_bool($val))
                    {
                        $r[$key] = "\"$key\": " . ($val ? 'true' : 'false');
                    }
                    else if (is_null($val))
                    {
                        $r[$key] = "\"$key\": null";
                    }
                    else
                    {
                        $r[$key] = "\"$key\": \"" . str_replace(array("\r\n", "\n", "\""), array("\\n", "\\n", "\\\""), $val) . '"';
                    }
                }
            }
        }
        return '{' . implode(',', $r) . '}';
    }
    /**
     *
     **/
    public static function error($msg, $code=-1, $params=array())
    {
        throw new Core_Exception($msg, $code, $params);
    }
    /**
     * 返回json对象
     */
    public static function returnJson( $code , $msg='' , $params=array(), $callback=NULL)
    {
        $msg = empty($msg)? Core_Comm_Modret::getMsg($code) :$msg;
        return Core_Comm_Modret::getRetJson($code, $msg, $params,$callback);
    }
    /**
     * 输出json对象 并exit
     */
    public static function exitJson( $code , $msg='' , $params=array(), $callback=NULL)
    {
        exit( self::returnJson($code, $msg, $params,$callback));
    }
    /**
     * iframe的ajax方式输出json对象 主要是有script标签
     */
    public static function iFrameExitJson( $code , $msg='' , $params=array(), $callback=NULL)
    {
        if(Core_Comm_Validator::checkCallback($callback))       //有回调函数才需要<script>标签
        {
            exit('<script>'.self::returnJson($code,$msg , $params, $callback).'</script>');
        }
        else
        {
            exit( self::returnJson($code, $msg, $params));
        }
    }
    public static function showmsg ( $msg , $gourl=-1 , $time = null , $button=false )
    {
        if ($time === null)
        {
            $time = Core_Config::get ('showtime' , 'basic' , 3);
        }
        $time > 1000 && $time = intval ($time / 1000);
        $seogourl = $gourl;
        if ($gourl == -1)
        {
            $seogourl = $gourl = empty($_SERVER['HTTP_REFERER'])?self::getUrlroot():$_SERVER['HTTP_REFERER'];
            //            $seogourl = $gourl = 'javascript:history.go(-1)';
        }
        elseif (!preg_match ('#^(https?|ftp)://#' , $gourl) && !preg_match ('/^javascript/' , $gourl))
        {
            $seogourl = Core_Template::seoChange ($gourl);
            if(!preg_match('/^\//', $gourl))
            {
                $gourl = '/' . $gourl;
            }
        }
        if (!$time)
        { #立即跳转
            if (!preg_match ('/^javascript/' , $gourl))
            {
                header ('Location: ' . $seogourl);
                echo $meta = "<meta http-equiv=\"refresh\" content=\"{$time};url={$seogourl}\" />";
            }
            else
            {
                echo "<script>" ,  str_replace("javascript:","",$seogourl)  , "</script>";
            }
        } else {
            #延迟跳转
            Core_Template::assignvar('gourl' , $gourl);
            Core_Template::assignvar('seogourl' , $seogourl);
            Core_Template::assignvar('__msg' , $msg);
            Core_Template::assignvar('msg' , $msg);
            Core_Template::assignvar('time' , $time);
            Core_Template::assignvar('button' , $button);
            Core_Template::assignvar('_resource',  Core_Config::get('resource_path','basic','/'));
            Core_Template::assignvar('site_url', Core_Config::get('site_url','basic',false));
            if (Core_Controller_Front::getInstance()->getModelName () == 'index')
            {
                Core_Template::render ('index/showmsg.tpl');
            }
            else
            {
                //exit("need showmsg templates");
                Core_Template::render ('member/showmsg.tpl');
            }
        }
//        exit;
    }
    public static $data = null;
    /**
     * 获得webroot
     * 以 / 结尾
     * @return string
     * @author Icehu
     */
    public static function getWebroot()
    {
        return Core_Controller_Front::getWebRoot();
    }
    /**
     * 获取前端用的Url根目录
     * 开启SEO 返回 /
     * 否则 返回 /index.php/
     *
     * @return string
     * @author Icehu
     */
    public static function getPathroot()
    {
        return self::getUrlroot()  . self::getPathinfoPre();
    }
    /**
     * 获得Urlroot
     * @return string
     * @author Icehu
     */
    public static function getUrlroot()
    {
        $webroot = self::getWebroot();
        $http = $_SERVER['SERVER_PORT'] == 443 ? 'https' : 'http';
        return $http . '://' . $_SERVER['HTTP_HOST'] . $webroot;
    }
    /**
     * 获得用户地址
     * @return string
     * @author echoyang
     */
    public static function getUserurl($uname='')
    {
        $usertUrl= self::getUrlroot();
        if($uname && Core_Comm_Validator::isUserAccount($uname))
        {
            $http = $_SERVER['SERVER_PORT'] == 443 ? 'https' : 'http';
            $port = ($_SERVER["SERVER_PORT"] == 80)? '':':80';
            $usertUrl = $http . '://' . $_SERVER['HTTP_HOST'] .$port. self::seoChange('u/'.$uname);
        }
        return $usertUrl;
    }
    /**
     * 获得 参数是$para的模块$preUrl下的 url,用于前台分页pathinfo数据生成
     *@$preUrl = /model/controllor/action
     *@$para = array('key1'=>$value1,'key2'=>$value2)
     * @return string
     * @author echoyang
     */
    public static function getParaUrl($preUrl,$para = array())
    {
        $returnUrl = '';
        if(!empty($preUrl))
        {
            if(is_array($para) && $para)
            {
                $returnUrl = $preUrl;
                foreach($para AS $k=>$v)
                {
                    if($k &&$v)
                    {
                        if(strpos($k,'__')===0)//去掉__开头的私有变量
                        {
                            continue;
                        }else{
                            $returnUrl .= '/'.$k.'/'.$v;
                        }
                    }
                }
            }
        }
        return $returnUrl;
    }
    /**
     * 获得用户地址以及简短url
     * @return array('origin','short')
     * @author echoyang
     */
    public static function getUserShorturl($uname='', $formatLength=0,$endStr='' )
    {
        empty($endStr) && $endStr = '...'; //末尾添加str
        $formatLength = intval($formatLength);
        if(empty($formatLength))
        {
            $formatLength = 26;  //长度默认取26
        }
        $userShortUrl = $usertUrl = self::getUserurl($uname);
        if( strlen($usertUrl) > $formatLength )
        {
            $userShortUrl =  substr($usertUrl, 0 ,$formatLength);
            $userShortUrl .= $endStr;
        }
        return array('origin'=>$usertUrl,'short'=>$userShortUrl);
    }
    /**
     * seo转换方法
     * @param string $str
     * @return string
     * @author Icehu
     */
    public static function seoChange($str)
    {
        return Core_Template::seoChange($str);
    }
    public static function escape_special_chars($string)
    {
        if (!is_array($string))
        {
            $string = preg_replace('!&(#?\w+);!', '%%%TTT_START%%%\\1%%%TTT_END%%%', $string);
            $string = htmlspecialchars($string);
            $string = str_replace(array('%%%TTT_START%%%', '%%%TTT_END%%%'), array('&', ';'), $string);
        }
        return $string;
    }
    /**
     * 检查文件是否可读
     * @param string $filename
     * @return bool
     * @author Icehu
     */
    public static function isReadable($filename)
    {
        if (!$fh = @fopen($filename, 'r', true))
        {
            return false;
        }
        @fclose($fh);
        return true;
    }
    /**
     * 获取pathinfo前缀,当nginx无配置时,使用'?',否则使用默认值'/'
     * @return string
     * @author maynardliu
     */
    public static function getPathinfoPre()
    {
        static $pathinfopre;
        if(isset($pathinfopre))
        {
            return $pathinfopre;
        }
        else
        {
            $pathinfopre = "/";
            if(false!==strpos($_SERVER['SERVER_SOFTWARE'],"nginx"))
            {
                if(!isset($_SERVER['ORIG_PATH_INFO']))
                {
                    $pathinfopre = "?";
                }
            }
            if(false!==strpos($_SERVER['SERVER_SOFTWARE'],"Microsoft-IIS"))
            {
                $pathinfopre = "/";
            }
        }
        return $pathinfopre;
    }
    /**
     * 经过重写的SESSION_START
     *
     * @author Icehu
     */
    public static function session_start()
    {
        if (!defined('SESSION_START'))
        {
            $cookie_pre = Core_Config::get('cookiepre', 'basic', 't_');
            $domain = Core_Config::get('cookiedomain', 'basic', null);
            ini_set('session.name', $cookie_pre . 'skey');
            session_set_cookie_params(0, '/', $domain, $_SERVER['SERVER_PORT'] == 443 ? 1 : 0, true);
            session_set_save_handler(
                array('Core_Lib_Session', 'open'),
                array('Core_Lib_Session', 'close'),
                array('Core_Lib_Session', 'read'),
                array('Core_Lib_Session', 'write'),
                array('Core_Lib_Session', 'destroy'),
                array('Core_Lib_Session', 'gc')
            );
            $cookieTime = Core_Config::get('cookietime', 'basic', 30);
            session_cache_expire($cookieTime > 0 ? $cookieTime : 30);
            session_start();
            define('SESSION_START', true);
        }
    }
    /**
     * UTF-8数据的中文截字
     *
     * @param string $content 需要截字的原文
     * @param number $length 截取的长度
     * @param string $add 末尾添加的字符串
     * @return string
     * @author Icehu
     */
    public static function cn_substr($content, $length, $add='')
    {
        if ($length && strlen($content) > $length)
        {
            $str = substr($content, 0, $length);
            $len = strlen($str);
            for ($i = strlen($str) - 1; $i >= 0; $i-=1)
            {
                $hex .= ' ' . ord($str[$i]);
                $ch = ord($str[$i]);
                if (($ch & 128) == 0)
                    return substr($str, 0, $i) . $add;
                if (($ch & 192) == 192)
                    return substr($str, 0, $i) . $add;
            }
            return($str . $hex . $add);
        }
        return $content;
    }
    /**
     * 按照命名规则载入类
     *
     * @param string $class
     * @return Class
     * @author
     */
    public static function loadClass($class)
    {
        if (class_exists($class, false))
        {
            return;
        }
        $file = str_replace('_', DIRECTORY_SEPARATOR, $class) . '.php';
        //include_once($file);
        require_once(INCLUDE_PATH . $file);
    }
    /**
     * 特殊加密url,防止地址被解析不完全
     *
     * @param string $class
     * @return string
     * @author
     */
    public static function iurlencode($key)
    {
        if(preg_match('/^apache/i', $_SERVER['SERVER_SOFTWARE']))
        {
            return rawurlencode(str_replace(array('/', '?', '&', '#'), array('%2F', '%3F', '%26', '%23'), $key));
        }
        return $key;
    }
    /**
     * 特殊url解密,防止地址不是原地址
     *
     * @param string $class
     * @return string
     * @author icehu
     */
    public static function iurldecode($key)
    {
        $key = rawurldecode($key);
        if(preg_match('/^apache/i', $_SERVER['SERVER_SOFTWARE']))
        {
            //Apache 会自动解码一次
            return str_replace(array('%2F') , array('/') , $key);
        }
        else
        {
            return str_replace(array('%2F', '%3F', '%26', '%23'), array('/', '?', '&', '#'), $key);
        }
    }
    /**
     * 格式化字节
     * @param $size - 大小(字节)
     * @return 返回格式化后的文本
     * @author Icehu
     */
    public static function formatBytes($size)
    {
        if ($size >= 1073741824)
        {
            $size = round($size / 1073741824 * 100) / 100 . ' GB';
        }
        elseif ($size >= 1048576)
        {
            $size = round($size / 1048576 * 100) / 100 . ' MB';
        }
        elseif ($size >= 1024)
        {
            $size = round($size / 1024 * 100) / 100 . ' KB';
        }
        else
        {
            $size = $size . ' Bytes';
        }
        return $size;
    }
    /**
     * 插件钩子调用方法
     * @param string $hackName
     * @return string
     */
    public static function pluginHack($hackName)
    {
        $returnContents = '';
        $pluginModel = new Model_Mb_Plugin();
        $pluginList = $pluginModel->getPluginList(3);
        foreach($pluginList as $plugin)
        {
            $call = array('Plugin_'.ucfirst($plugin['foldername']).'_Index', $hackName.'Hack');
            if (class_exists('Plugin_'.ucfirst($plugin['foldername']).'_Index'))
                if(is_callable($call))
                    $returnContents .= call_user_func($call);
        }
        return $returnContents;
    }
    public static function timeMark($tag)
    {
        $apiName = NULL;
        static $timeArr=null;
        if(isset($timeArr[$apiName]))
        {
            $timeArr[$apiName]['et']=self::microtime();
            $costTime = $timeArr[$apiName]['et'] - $timeArr[$apiName]['bt'];
            unset($timeArr[$apiName]);
            return sprintf("%d", $costTime*1000);
        }
        else
        {
            $timeArr[$apiName]['bt']=self::microtime();
        }
    }
    public static function apiLog($apiName, $apiReponse)
    {
        if(defined("API_LOG_LEVEL"))
        {
            if(in_array(API_LOG_LEVEL,array(1,2)))
            {
                $costTime = self::timeMark($apiName);
            }
            if($costTime)
            {
                if(!is_array($apiReponse))
                {
                    $apiReponse = array('ret'=>4,'msg'=>'api call failed','errcode'=>'-1');
                }
                $ret = $apiReponse['ret'];
                $msg= $apiReponse['msg'];
                $errCode= $apiReponse['errcode'];
                switch(API_LOG_LEVEL)
                {
                case 1:
                    self::apiLogLocal($apiName, $ret, $msg, $errCode, $costTime);
                    break;
                case 2:
                    self::apiLogBoss($apiName, $ret, $msg, $errCode, $costTime);
                    break;
                default:
                    break;
                }
            }
        }
    }
    public static function apiLogLocal($apiName,$ret=0,$msg="ok",$errCode="0",$costTime)
    {
        static $pageBegin=true;
        $fileName = 'apilog';
        $logTime = date("Y-m-d H:i:s");
        $logData = array_values(func_get_args());
        array_unshift($logData,$logTime);
        $logData = implode("#",$logData);
        if($pageBegin)
        {
            Core_Util_Log::file($fileName,"\r\n".$_SERVER['REQUEST_URI']);
            $pageBegin=false;
        }
        Core_Util_Log::file($fileName,$logData);
    }
    public static function apiLogBoss($apiName, $ret=0, $msg="ok", $errCode="0", $costTime)
    {
        $ip     =   self::ip();
        $qq     =   12345;
        $biz    =   "weibo.open.iweibo";
        $op     =   "call_api";
        $status =   $ret;
        $logid  =   1160;
        $flowid =   $errCode;
        $appKey =   Core_Config::get('appkey', 'basic');
        $serverIp=  $_SERVER['SERVER_ADDR'];
        $value1=0;
        $value2=0;
        $value3=substr(Core_Util_Log::$apiRequstUrl,0,254);
        $value4=substr(Core_Util_Log::$apiRequstUrl,254,503);
        //$ret = Core_Util_Log::bossLog("%s,%u,%s,%s,%d,%u,%u,%s,%d,%s,%d,%d,%s,%s,%d,%d,%s,%s",$ip,$qq,$biz,$op,$status,$logid,$flowid, $apiName, $ret,$msg,$errCode,$costTime,$appKey,$serverIp,$value1,$value2,$value3,$value4);
        //$ret = Core_Util_Log::bossLog("%s,%d,%s,%s,%d,%d,%d,%s,%s,%d,%s,%d,%d,%s,%s,%d,%d,%s,%s",$ip,$qq,$biz,$op,$status,$logid,$flowid, $apiName, $ret,$msg,$errCode,$costTime,$appKey,$serverIp,$value1,$value2,$value3,$value4);
        $ret = Core_Util_Log::httpBossLog("%s,%u,%s,%s,%d,%u,%u,%s,%d,%s,%d,%d,%s,%s,%d,%d,%s,%s",$ip,$qq,$biz,$op,$status,$logid,$flowid, $apiName, $ret,$msg,$errCode,$costTime,$appKey,$serverIp,$value1,$value2,$value3,$value4);
        return ;
    }
    /*
     *@param $arg1 string
     *@param $arg2 string
     */
    function formatToFuncName()
    {
        $args = func_get_args();
        $args = array_filter($args,create_function('$v','return !empty($v);'));
        $ret = strtolower(array_shift($args));
        $ret .=  array_reduce($args,create_function('$v,$w','return $v . ucfirst(strtolower($w));'));
        return $ret;
    }
}
/**
 * Core_Excetpion 异常重写
 * 这两个异常放到Fun 文件中,不符合命名规范。
 * 但是Fun全局载入,这是为了减少文件数量,提高性能。
 *
 * @author Icehu
 */
class Core_Exception extends Exception
{
    public $params = array();
    public function __construct($msg, $code, $params=array())
    {
        parent::__construct($msg, $code);
        $this->params = (array) $params;
    }
    public function getParams()
    {
        return $this->params;
    }
}
/**
 * Core_Excetpion 异常重写
 * open_client异常
 * @author echoyang
 */
class Core_Api_Exception extends Core_Exception
{
    public $params = array();
    public function __construct($msg, $code, $params=array())
    {
        parent::__construct($msg, $code, $params);
    }
}
class Core_Db_Exception extends Core_Exception
{
}
class Error_Display
{
    public static function show($exception)
    {
        $exceptionType = get_class($exception);
        $class= $exceptionType."_Error_Show";
        if(!class_exists($class, false))
        {
            $class= "Exception_Error_Show";
        }
        $errorShow = new $class($exception);
        $errorShow->dispatchShow();
    }
}
class Exception_Error_Show
{
    static $e;
    function __construct($e)
    {
        self::$e = $e;
    }
    public function dispatchShow()
    {
        $front = Core_Controller_Front::getInstance();
        $inajax=$front->inAjax() ? "inajax" : "";
        $rundebug = Core_Config::get('rundebug','basic',false) ? "debug" : "";
        $showfunc = Core_Fun::formatToFuncName($rundebug,$inajax,"show");
        $this->$showfunc();
    }
    protected function roughShow()
    {
        header('Content-Type: text/html; charset=utf-8');
        echo '<pre>';
        var_dump(self::$e);
    }
    protected function show()
    {
        Core_Fun::showmsg('系统繁忙', -1 );
    }
    protected function inajaxShow()
    {
        Core_Fun::exitJson(self::$e->getCode(), self::$e->getMessage());
    }
    protected function debugShow()
    {
        self::roughShow();
    }
    protected function debugInajaxShow()
    {
        Core_Fun::exitJson(self::$e->getCode(), self::$e->getMessage(), self::$e->getParams());
    }
}
class Core_Db_Exception_Error_Show extends Exception_Error_Show
{
    protected function inajaxShow()
    {
        Core_Fun::exitJson(self::$e->getCode(), '系统繁忙' , self::$e->getParams());
    }
}
class Core_Exception_Error_Show extends Exception_Error_Show
{
    public function dispatchShow()
    {
        $front = Core_Controller_Front::getInstance();
        $inajax=$front->inAjax() ? "inajax" : "";
        $rundebug = Core_Config::get('rundebug','basic',false) ? "debug" : "";
        if($rundebug)
        {
            $showfunc = Core_Fun::formatToFuncName($rundebug,$inajax,"show");
            $this->$showfunc();
        }
        else
        {
            $code = self::$e->getCode();
            $msg = self::$e->getMessage();
            if($code == 404)
            {
                header('HTTP/1.1 404 Not Found');
                exit;
            }
            if($code != 0)
            {
                    if($inajax)
                    {
                        self::inajaxShow();
                    }
                    else
                    {
                        if($code > 0 )
                        {
                            self::show('系统繁忙', -1 );
                        }
                        else
                        {
                            self::show($msg, -1 );
                        }
                    }
            }
        }
    }
    protected function show($msg,$code)
    {
        Core_Fun::showmsg($msg,$code);
    }
    protected function inajaxShow()
    {
        Core_Fun::exitJson($code, '系统繁忙' , $msg);
    }
}
class Core_Api_Exception_Error_Show extends Exception_Error_Show
{
    protected function show()
    {
        $code = self::$e->getCode();
        $msg = self::$e->getMessage();
        if(isset($code) && !empty($code))
        {
            $msg .= ' (errcode='.$code.')。';
        }
        Core_Fun::showmsg($msg, -1 );
        exit();
    }
}
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码
期待你的评论

6 条评论
  1. 阿亮 白银   阿亮  

    想了想 还是先询问一下你 可以复制拿走嘛@(小乖)

    1. 小尾巴 王者   小尾巴   博主
      @ 阿亮

      拿呗~

  2. 镜花水月 白银   镜花水月  

    羡慕后端大佬

    1. 小尾巴 王者   小尾巴   博主
      @ 镜花水月

      做人呐,最重要的就是低调 ๑乛◡乛๑

  3. 老黃 钻石   老黃  

    大佬的日常分享代码。

    1. 小尾巴 王者   小尾巴   博主
      @ 老黃

      低调 ๑乛◡乛๑