当前位置: 亚洲城ca88 > ca88 > 正文

【ca88】有惊无险过滤函数代码,常用函数库

时间:2019-07-26 17:08来源:ca88
复制代码 代码如下: ?php 复制代码 代码如下: //安全过滤输入[jb] function check_str($string, $isurl = false) { $string =preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F]/','',$string); $string = str_replace(array("","","r"),'',

复制代码 代码如下:

<?php

复制代码 代码如下:

//安全过滤输入[jb]
function check_str($string, $isurl = false)
{
$string = preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F]/','',$string);
$string = str_replace(array("\0","\0","r"),'',$string);
empty($isurl) && $string = preg_replace("/&(?!(#[0-9] |[a-z] );)/si",'&',$string);
$string = str_replace(array("<",'<'),'<',$string);
$string = str_replace(array(">",'>'),'>',$string);
$string = str_replace(array('"',"'","t",' '),array('“','‘',' ',' '),$string);
return trim($string);
}

/**

/**
  * html转变输出(只转义' " 保留Html符合规律运作)   * @param $param
  * @return string
  */
 function htmlEscape($param) {
    return trim(htmlspecialchars($param, ENT_QUOTES));
 }

下边是为我们整理的一些过滤函数:

* 常用函数库

  /**
  * 是还是不是数组(同不经常间检验数组中是或不是存在值)   * @param $params
  * @return boolean
  */
 function isArray($params) {
     return (!is_array($params) || !count($params)) ? false : true;
 }

复制代码 代码如下:

*

 /**
  * 变量是不是在数组中存在(参数容错, 字符串是或不是留存于数组中)   * @param $param
  * @param $params
  * @return boolean
  */
 function inArray($param, $params) {
    return (!in_array((string)$param, (array)$params)) ? false : true;
 }

/**
* 安全过滤类-过滤javascript,css,iframes,object等不安全参数 过滤品级高
*  Controller中动用方法:$this->controller->fliter_script($value)
* @param  string $value 须求过滤的值
* @return string
*/
function fliter_script($value) {
$value = preg_replace("/(javascript:)?on(click|load|key|mouse|error|abort|move|unload|change|dblclick|move|reset|resize|submit)/i","&111n\2",$value);
$value = preg_replace("/(.*?)</script>/si","",$value);
$value = preg_replace("/(.*?)</iframe>/si","",$value);
$value = preg_replace ("//iesU", '', $value);
return $value;
}

*/

 /**
  * 通用多品种混合转义函数   * @param $var
  * @param $strip
  * @param $isArray
  * @return mixture
  */
 function sqlEscape($var, $strip = true, $isArray = false) {
    if (is_array($var)) {
        if (!$isArray) return " '' ";
        foreach ($var as $key => $value) {
            $var[$key] = trim(S::sqlEscape($value, $strip));
        }
        return $var;
    } elseif (is_numeric($var)) {
         return " '" . $var . "' ";
    } else {
        return " '" . addslashes($strip ? stripslashes($var) : $var) . "' ";
    }
}

/**
* 安全过滤类-过滤HTML标签
*  Controller中动用方式:$this->controller->fliter_html($value)
* @param  string $value 供给过滤的值
* @return string
*/
function fliter_html($value) {
if (function_exists('htmlspecialchars')) return htmlspecialchars($value);
return str_replace(array("&", '"', "'", "<", ">"), array("&", """, "'", "<", ">"), $value);
}

class Core_Fun

     /**
      * 获取服务器变量       * @param $keys
      * @return string
      */
     function getServer($keys) {
         $server = array();
         $array = (array) $keys;
         foreach ($array as $key) {
             $server[$key] = NULL;
             if (isset($_SERVER[$key])) {
                 $server[$key] = str_replace(array('<','>','"',"'",'<','>','"',''','<','>'), '', $_SERVER[$key]);
             }
         }
         return is_array($keys) ? $server : $server[$keys];
     }

/**
* 安全过滤类-对步入的数码加下划线 防止SQL注入
*  Controller中选拔方法:$this->controller->fliter_sql($value)
* @param  string $value 必要过滤的值
* @return string
*/
function fliter_sql($value) {
$sql = array("select", 'insert', "update", "delete", "'", "/*",
     "../", "./", "union", "into", "load_file", "outfile");
$sql_re = array("","","","","","","","","","","","");
return str_replace($sql, $sql_re, $value);
}

{

     /**
      * 变量转义       * @param $array
      */
     function slashes(&$array) {
         if (is_array($array)) {
             foreach ($array as $key => $value) {
                 if (is_array($value)) {
                     S::slashes($array[$key]);
                 } else {
                     $array[$key] = addslashes($value);
                 }
             }
         }
     }

/**
* 安全过滤类-通用数据过滤
*  Controller中选择情势:$this->controller->fliter_escape($value)
* @param string $value 须要过滤的变量
* @return string|array
*/
function fliter_escape($value) {
if (is_array($value)) {
  foreach ($value as $k => $v) {
   $value[$k] = self::fliter_str($v);
  }
} else {
  $value = self::fliter_str($value);
}
return $value;
}

    /**

     /**
      * 目录转换       * @param unknown_type $dir
      * @return string
      */
     function escapeDir($dir) {
         $dir = str_replace(array("'",'#','=','`','$','%','&',';'), '', $dir);
         return rtrim(preg_replace('/(/){2,}|(\){1,}/', '/', $dir), '/');
     }
     /**
      * 通用多类型转变       * @param $mixed
      * @param $isint
      * @param $istrim
      * @return mixture
      */
     function escapeChar($mixed, $isint = false, $istrim = false) {
         if (is_array($mixed)) {
             foreach ($mixed as $key => $value) {
                 $mixed[$key] = S::escapeChar($value, $isint, $istrim);
             }
         } elseif ($isint) {
             $mixed = (int) $mixed;
         } elseif (!is_numeric($mixed) && ($istrim ? $mixed = trim($mixed) : $mixed) && $mixed) {
             $mixed = S::escapeStr($mixed);
         }
         return $mixed;
     }
     /**
      * 字符调换       * @param $string
      * @return string
      */
     function escapeStr($string) {
         $string = str_replace(array("\0","\0","r"), '', $string); //modified@2010-7-5
         $string = preg_replace(array('/[\x00-\x08\x0B\x0C\x0E-\x1F]/','/&(?!(#[0-9] |[a-z] );)/is'), array('', '&'), $string);
         $string = str_replace(array("<",'<'), '<', $string);
         $string = str_replace(array(">",'>'), '>', $string);
         $string = str_replace(array('"',"'","t",'  '), array('"',''','    ','  '), $string);
         return $string;
     }
     /**
      * 变量检查       * @param $var
      */
     function checkVar(&$var) {
         if (is_array($var)) {
             foreach ($var as $key => $value) {
                 S::checkVar($var[$key]);
             }
         } elseif (P_W != 'admincp') {
             $var = str_replace(array('..',')','<','='), array('..',')','<','='), $var);
         } elseif (str_replace(array('<iframe','<meta','<script'), '', $var) != $var) {
             global $basename;
             $basename = 'javascript:history.go(-1);';
             adminmsg('word_error');
         }
     }

/**
* 安全过滤类-字符串过滤 过滤特殊有挫伤字符
*  Controller中动用方法:$this->controller->fliter_str($value)
* @param  string $value 需求过滤的值
* @return string
*/
function fliter_str($value) {
$badstr = array("\0", "\0", "r", '&', ' ', '"', "'", "<", ">", "   ", "<", ">");
$newstr = array('', '', '', '&', ' ', '"', ''', "<", ">", "   ", "<", ">");
$value  = str_replace($badstr, $newstr, $value);
$value  = preg_replace('/&((#(d{3,5}|x[a-fA-F0-9]{4}));)/', '&\1', $value);
return $value;
}

    * 对变量进行反转义到原本数据

您或然感兴趣的篇章:

  • 一流实用的7个PHP代码片段分享
  • 9个优良的PHP代码片段分享
  • 贰十三个超实用的PHP代码片段
  • 10个实用的PHP代码片段
  • 7个极品实用的PHP代码片段
  • 46 个特别有效的 PHP 代码片段
  • php中常用字符串管理代码片段整理
  • 11个最好有用值得珍藏的PHP代码片段
  • 无法不收藏的二十多个php实用代码片段
  • php实用代码片段整理

/**
* 私有路劲安全转账
*  Controller中选取方式:$this->controller->filter_dir($fileName)
* @param string $fileName
* @return string
*/
function filter_dir($fileName) {
$tmpname = strtolower($fileName);
$temp = array(':/',"\0", "..");
if (str_replace($temp, '', $tmpname) !== $tmpname) {
  return false;
}
return $fileName;
}

    *

/**
* 过滤目录
*  Controller中动用格局:$this->controller->filter_path($path)
* @param string $path
* @return array
*/
public function filter_path($path) {
$path = str_replace(array("'",'#','=','`','$','%','&',';'), '', $path);
return rtrim(preg_replace('/(/){2,}|(\){1,}/', '/', $path), '/');
}

    * @param string|array $param 必要反转义的固有数据

/**
* 过滤PHP标签
*  Controller中选用办法:$this->controller->filter_phptag($string)
* @param string $string
* @return string
*/
public function filter_phptag($string) {
return str_replace(array(''), array('<?', '?>'), $string);
}

    * @return string|array

/**
* 安全过滤类-重返函数
*  Controller中接纳办法:$this->controller->str_out($value)
* @param  string $value 须求过滤的值
* @return string
*/
public function str_out($value) {
$badstr = array("<", ">", "<", ">");
$newstr = array("<", ">", "<", ">");
$value  = str_replace($newstr, $badstr, $value);
return stripslashes($value); //下划线
}

    * @author Icehu

您恐怕感兴趣的篇章:

  • YII Framework的filter过滤器用法深入分析
  • PHP的Yii框架中过滤器相关的使用总计
  • php达成XSS安全过滤的主意
  • PHP中字符安全过滤函数使用小结
  • php推断文件上传类型及过滤不安全部据的不二秘技
  • php常用的平安过滤函数集锦
  • php 对输入音信的进展安全过滤的函数代码
  • PHP开垦不可能违反的平安准绳过滤用户输入
  • php HtmlReplace输入过滤安全函数
  • php下过滤html代码的函数 升高程序安全性
  • Yii净化器CHtmlPurifier用法示例(过滤不良代码)

    */

    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("rn", "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('/', '?', '&', '#'), $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('/') , array('/') , $key);

        }

        else

        {

            return str_replace(array('/', '?', '&', '#'), 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,"rn".$_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();

    }

}

编辑:ca88 本文来源:【ca88】有惊无险过滤函数代码,常用函数库

关键词: 亚洲城ca88