www.gusucode.com > baigo CMS PHP开源网站管理系统 v1.2.2源码程序 > baigocms_v1.2.2/bg_sso/core/func/common.func.php
<?php /*----------------------------------------------------------------- !!!!警告!!!! 以下为系统文件,请勿修改 -----------------------------------------------------------------*/ //不能非法包含或直接执行 if(!defined("IN_BAIGO")) { exit("Access Denied"); } /** 随机数 * fn_rand function. * * @access public * @param int $num_rand (default: 32) * @return void */ function fn_rand($num_rand = 32) { $_str_char = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; $_str_rnd = ""; while (strlen($_str_rnd) < $num_rand) { $_str_rnd .= substr($_str_char, (rand(0, strlen($_str_char))), 1); } return $_str_rnd; } /** 获取 IP * fn_getIp function. * * @access public * @return void */ function fn_getIp($str_ipTrue = true) { if (isset($_SERVER)) { if ($str_ipTrue) { if (fn_server("HTTP_X_FORWARDED_FOR")) { $_arr_ips = explode(",", fn_server("HTTP_X_FORWARDED_FOR")); foreach ($_arr_ips as $_key=>$_value) { $_value = trim($_value); if ($_value != "unknown") { $_str_ip = $_value; break; } } } elseif (fn_server("HTTP_CLIENT_IP")) { $_str_ip = fn_server("HTTP_CLIENT_IP"); } elseif (fn_server("REMOTE_ADDR")) { $_str_ip = fn_server("REMOTE_ADDR"); } else { $_str_ip = "0.0.0.0"; } } else { if (fn_server("REMOTE_ADDR")) { $_str_ip = fn_server("REMOTE_ADDR"); } else { $_str_ip = "0.0.0.0"; } } } else { if ($str_ipTrue) { if (getenv("HTTP_X_FORWARDED_FOR")) { $_str_ip = getenv("HTTP_X_FORWARDED_FOR"); } elseif (getenv("HTTP_CLIENT_IP")) { $_str_ip = getenv("HTTP_CLIENT_IP"); } else { $_str_ip = getenv("REMOTE_ADDR"); } } else { $_str_ip = getenv("REMOTE_ADDR"); } } return $_str_ip; } /** 验证码校对 * fn_seccode function. * * @access public * @return void */ function fn_seccode() { $_str_seccode = strtolower(fn_post("seccode")); if ($_str_seccode != fn_session("seccode")) { return false; } else { return true; } } /** 令牌生成、校对 * fn_token function. * * @access public * @param string $token_action (default: "mk") * @param string $token_method (default: "post") * @return void */ function fn_token($token_action = "mk", $session_method = "post", $cookie_method = "cookie") { switch ($token_action) { case "chk": switch ($session_method) { case "get": $_str_tokenSession = fn_getSafe(fn_get("token_session"), "txt", ""); break; default: $_str_tokenSession = fn_getSafe(fn_post("token_session"), "txt", ""); break; } switch ($cookie_method) { case "get": $_str_tokenCookie = fn_getSafe(fn_get("token_cookie"), "txt", ""); break; case "post": $_str_tokenCookie = fn_getSafe(fn_post("token_cookie"), "txt", ""); break; default: $_str_tokenCookie = fn_cookie("token_cookie"); break; } if (BG_SWITCH_TOKEN == 1) { if ($_str_tokenSession != fn_session("token_session") || $_str_tokenCookie != fn_session("token_cookie")) { $_str_return = false; } else { $_str_return = true; } } else { $_str_return = true; } break; default: if (BG_SWITCH_TOKEN == 1) { $_num_tokenSessionDiff = fn_session("token_session_time") + 300; //session有效期 if (!fn_session("token_session") || !fn_session("token_session_time") || $_num_tokenSessionDiff < time()) { $_str_tokenSession = fn_rand(); fn_session("token_session", "mk", $_str_tokenSession); fn_session("token_session_time", "mk", time()); } else { $_str_tokenSession = fn_session("token_session"); } $_num_tokenCookieDiff = fn_session("token_cookie_time") + 300; //cookie有效期 if (!fn_session("token_cookie") || !fn_session("token_cookie_time") || $_num_tokenCookieDiff < time()) { $_str_tokenCookie = fn_rand(); fn_session("token_cookie", "mk", $_str_tokenCookie); fn_session("token_cookie_time", "mk", time()); } else { $_str_tokenCookie = fn_session("token_cookie"); } $_str_return = $_str_tokenSession; fn_cookie("token_cookie", "mk", $_str_tokenCookie); } break; } return $_str_return; } /*============清除全部cookie============ 无返回 */ function fn_clearCookie() { fn_cookie("cookie_ui", "unset"); fn_cookie("cookie_lang", "unset"); } /** 过滤数据 * fn_getSafe function. * * @access public * @param mixed $str_string * @param string $str_type (default: "txt") * @param string $str_default (default: "") * @return void */ function fn_getSafe($str_string, $str_type = "txt", $str_default = "") { if ($str_string) { $_str_string = $str_string; } else { $_str_string = $str_default; } switch ($str_type) { case "int": //数值型 if (is_numeric($_str_string)) { $_str_return = intval($_str_string); //如果是数值型则赋值 } else { $_str_return = 0; //如果默认值为空则赋值为0 } break; default: //默认 $_str_return = htmlentities($_str_string, ENT_QUOTES, "UTF-8"); break; } return $_str_return; } /** 获取 UTF8 字符长度 * fn_strlen_utf8 function. * * @access public * @param mixed $str * @return void */ function fn_strlen_utf8($str_string) { // 将字符串分解为单元 preg_match_all("/./us", $str_string, $match); // 返回单元个数 return count($match[0]); } /** * fn_substr_utf8 function. * * @access public * @param mixed $str_string * @param mixed $begin * @param mixed $length * @return void */ function fn_substr_utf8($str_string, $begin, $length) { preg_match_all("/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/i", $str_string, $_arr); return join("", array_slice($_arr[0], $begin, $length)); } /** 分页参数 * fn_page function. * * @access public * @param mixed $num_total * @param mixed $num_per (default: BG_DEFAULT_PERPAGE) * @return void */ function fn_page($num_total, $num_per = BG_DEFAULT_PERPAGE) { $_num_pageThis = fn_getSafe(fn_get("page"), "int", 1); if ($_num_pageThis < 1) { $_num_pageThis = 1; } else { $_num_pageThis = $_num_pageThis; } $_num_pageTotal = $num_total / $num_per; if (intval($_num_pageTotal) < $_num_pageTotal) { $_num_pageTotal = intval($_num_pageTotal) + 1; } elseif ($_num_pageTotal < 1) { $_num_pageTotal = 1; } else { $_num_pageTotal = intval($_num_pageTotal); } if ($_num_pageThis > $_num_pageTotal) { $_num_pageThis = $_num_pageTotal; } if ($_num_pageThis <= 1) { $_num_except = 0; } else { $_num_except = ($_num_pageThis - 1) * $num_per; } $_p = intval(($_num_pageThis - 1) / 10); //是否存在上十页、下十页参数 $_begin = $_p * 10 + 1; //列表起始页 $_end = $_p * 10 + 10; //列表结束页 if ($_end >= $_num_pageTotal) { $_end = $_num_pageTotal; } return array( "page" => $_num_pageThis, "p" => $_p, "begin" => $_begin, "end" => $_end, "total" => $_num_pageTotal, "except" => $_num_except, ); } /** JSON 编码(内容可编码成 base64) * fn_jsonEncode function. * * @access public * @param string $arr_json (default: "") * @param string $method (default: "") * @return void */ function fn_jsonEncode($arr_json = "", $method = "") { if ($arr_json) { $arr_json = fn_eachArray($arr_json, $method); //print_r($method); $str_json = json_encode($arr_json); //json编码 } else { $str_json = ""; } return $str_json; } /** JSON 解码 (内容可解码自 base64) * fn_jsonDecode function. * * @access public * @param string $str_json (default: "") * @param string $method (default: "") * @return void */ function fn_jsonDecode($str_json = "", $method = "") { if (isset($str_json)) { $arr_json = json_decode($str_json, true); //json解码 $arr_json = fn_eachArray($arr_json, $method); } else { $arr_json = array(); } return $arr_json; } /** 遍历数组,并进行 base64 解码编码 * fn_eachArray function. * * @access public * @param mixed $arr * @param string $method (default: "encode") * @return void */ function fn_eachArray($arr, $method = "encode") { $_is_magic = get_magic_quotes_gpc(); if (is_array($arr)) { foreach ($arr as $_key=>$_value) { if (is_array($_value)) { $arr[$_key] = fn_eachArray($_value, $method); } else { switch ($method) { case "encode": if (!$_is_magic) { $_str = addslashes($_value); } else { $_str = $_value; } $arr[$_key] = base64_encode($_str); break; case "decode": $_str = base64_decode($_value); //if (!$_is_magic) { $arr[$_key] = stripslashes($_str); //} else { //$arr[$_key] = $_str; //} break; default: if (!$_is_magic) { $_str = addslashes($_value); } else { $_str = $_value; } $arr[$_key] = $_str; break; } } } } else { $arr = array(); } return $arr; } /** 密码加密 * fn_baigoEncrypt function. * * @access public * @param mixed $str * @param mixed $rand * @return void */ function fn_baigoEncrypt($str, $rand, $is_md5 = false) { if ($is_md5) { $_str = $str; } else { $_str = md5($str); } $_str_return = md5($_str . $rand); return $_str_return; } /** 正则匹配 * fn_regChk function. * * @access public * @param mixed $str_chk * @param mixed $str_reg * @param bool $str_wild (default: false) * @return void */ function fn_regChk($str_chk, $str_reg, $str_wild = false) { $_str_reg = trim($str_reg); $_str_reg = preg_quote($_str_reg, "/"); if ($str_wild == true) { $_str_reg = str_replace("\\*", ".*", $_str_reg); $_str_reg = str_replace(" ", "", $_str_reg); $_str_reg = "/^(" . $_str_reg . ")$/i"; } else { $_str_reg = "/(" . $_str_reg . ")$/i"; } $_str_reg = str_replace("\|", "|", $_str_reg); $_str_reg = str_replace("|)", ")", $_str_reg); /*print_r($_str_reg . "<br>"); preg_match($_str_reg, $str_chk, $aaaa); print_r($aaaa);*/ return preg_match($_str_reg, $str_chk); } /** 封装 $_GET * fn_get function. * * @access public * @param mixed $key * @return void */ function fn_get($key) { if (isset($_GET[$key])) { return $_GET[$key]; } else { return null; } } /** 封装 $_POST * fn_post function. * * @access public * @param mixed $key * @return void */ function fn_post($key) { if (isset($_POST[$key])) { return $_POST[$key]; } else { return null; } } /** 封装 $_COOKIE * fn_cookie function. * * @access public * @param mixed $key * @return void */ function fn_cookie($key, $method = "get", $value = "") { switch ($method) { case "mk": setcookie($key . "_" . BG_SITE_SSIN, $value); break; case "unset": unset($_COOKIE[$key . "_" . BG_SITE_SSIN]); break; default: if (isset($_COOKIE[$key . "_" . BG_SITE_SSIN])) { return $_COOKIE[$key . "_" . BG_SITE_SSIN]; } else { return null; } break; } } function fn_session($key, $method = "get", $value = "") { switch ($method) { case "mk": $_SESSION[$key . "_" . BG_SITE_SSIN] = $value; break; case "unset": unset($_SESSION[$key . "_" . BG_SITE_SSIN]); break; default: if (isset($_SESSION[$key . "_" . BG_SITE_SSIN])) { return $_SESSION[$key . "_" . BG_SITE_SSIN]; } else { return null; } break; } } /** 封装 $_REQUEST * fn_request function. * * @access public * @param mixed $key * @return void */ function fn_request($key) { if (isset($_REQUEST[$key])) { return $_REQUEST[$key]; } else { return null; } } /** 封装 $_SERVER * fn_server function. * * @access public * @param mixed $key * @return void */ function fn_server($key) { if (isset($_SERVER[$key])) { return $_SERVER[$key]; } else { return null; } }