$value) { if (is_array($value)) { if ($value[$pidField] == "$tid") { // 父亲找到儿子 $value[$sonName] = get_tree($data, $value[$idField], $idField, $pidField, $sonName); $tree[] = $value; } } else { if ($value->$pidField == "$tid") { // 父亲找到儿子 $temp = clone $value; $temp->$sonName = get_tree($data, $value->$idField, $idField, $pidField, $sonName); $tree[] = $temp; } } } return $tree; } // 获取数据数组的映射数组 function get_mapping($array, $vValue, $vKey = null) { if (! $array) return array(); foreach ($array as $key => $value) { if (is_array($value)) { if ($vKey) { $result[$value[$vKey]] = $value[$vValue]; } else { $result[] = $value[$vValue]; } } elseif (is_object($value)) { if ($vKey) { $result[$value->$vKey] = $value->$vValue; } else { $result[] = $value->$vValue; } } else { return $array; } } return $result; } // 页码赋值,异常返回1 function get_page() { if (isset($_GET['page'])) { $value = trim($_GET['page']); if (preg_match('/^[0-9]+$/', $value)) { return $value; } } return 1; } // 返回请求类型 function get_request_method() { return $_SERVER['REQUEST_METHOD']; } // 获取当前完整URL地址 function get_current_url() { $http_type = is_https() ? 'https://' : 'http://'; return $http_type . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; } // 获取字符串第N次出现位置 function get_strpos($string, $find, $n) { $pos = strpos($string, $find); for ($i = 2; $i <= $n; $i ++) { $pos = strpos($string, $find, $pos + 1); } return $pos; } // array_column向下兼容低版本PHP if (! function_exists('array_column')) { function array_column($input, $columnKey, $indexKey = null) { $columnKeyIsNumber = (is_numeric($columnKey)) ? true : false; $indexKeyIsNull = (is_null($indexKey)) ? true : false; $indexKeyIsNumber = (is_numeric($indexKey)) ? true : false; $result = array(); foreach ((array) $input as $key => $row) { if ($columnKeyIsNumber) { $tmp = array_slice($row, $columnKey, 1); $tmp = (is_array($tmp) && ! empty($tmp)) ? current($tmp) : null; } else { $tmp = isset($row[$columnKey]) ? $row[$columnKey] : null; } if (! $indexKeyIsNull) { if ($indexKeyIsNumber) { $key = array_slice($row, $indexKey, 1); $key = (is_array($key) && ! empty($key)) ? current($key) : null; $key = is_null($key) ? 0 : $key; } else { $key = isset($row[$indexKey]) ? $row[$indexKey] : 0; } } $result[$key] = $tmp; } return $result; } } /** * 系统信息弹出解析函数 * * @param string $info_tpl模板 * @param string $string内容 * @param string $jump_url跳转地址 * @param number $time时间 */ function parse_info_tpl($info_tpl, $string, $jump_url = null, $time = 0) { if (file_exists($info_tpl)) { $tpl_content = file_get_contents($info_tpl); if ($jump_url) { $timeout_js = ""; } else { $timeout_js = ''; } $tpl_content = str_replace('{js}', $timeout_js, $tpl_content); $tpl_content = str_replace('{info}', $string, $tpl_content); $tpl_content = str_replace('{url}', $jump_url, $tpl_content); $tpl_content = str_replace('{time}', $time, $tpl_content); $tpl_content = str_replace('{sitedir}', SITE_DIR, $tpl_content); $tpl_content = str_replace('{coredir}', CORE_DIR, $tpl_content); $tpl_content = str_replace('{appversion}', APP_VERSION . '-' . RELEASE_TIME, $tpl_content); $tpl_content = str_replace('{serveros}', PHP_OS, $tpl_content); $tpl_content = str_replace('{serversoft}', $_SERVER['SERVER_SOFTWARE'], $tpl_content); return $tpl_content; } else { exit('
:(
提示信息的模板文件不存在!'); } } // 获取转义数据,支持字符串、数组、对象 function escape_string($string) { if (! $string) return $string; if (is_array($string)) { // 数组处理 foreach ($string as $key => $value) { $string[$key] = escape_string($value); } } elseif (is_object($string)) { // 对象处理 foreach ($string as $key => $value) { $string->$key = escape_string($value); } } else { // 字符串处理 $string = htmlspecialchars(trim($string), ENT_QUOTES, 'UTF-8'); $string = addslashes($string); } return $string; } // 字符反转义html实体及斜杠,支持字符串、数组、对象 function decode_string($string) { if (! $string) return $string; if (is_array($string)) { // 数组处理 foreach ($string as $key => $value) { $string[$key] = decode_string($value); } } elseif (is_object($string)) { // 对象处理 foreach ($string as $key => $value) { $string->$key = decode_string($value); } } else { // 字符串处理 $string = stripcslashes($string); $string = htmlspecialchars_decode($string, ENT_QUOTES); $string = preg_replace_r('/pboot:if/i', 'pboot@if', $string); // 避免解码绕过问题 } return $string; } // 字符反转义斜杠,支持字符串、数组、对象 function decode_slashes($string) { if (! $string) return $string; if (is_array($string)) { // 数组处理 foreach ($string as $key => $value) { $string[$key] = decode_slashes($value); } } elseif (is_object($string)) { // 对象处理 foreach ($string as $key => $value) { $string->$key = decode_slashes($value); } } else { // 字符串处理 $string = stripcslashes($string); } return $string; } // 字符串双层MD5加密 function encrypt_string($string) { return md5(md5($string)); } // 生成唯一标识符 function get_uniqid() { return encrypt_string(uniqid(mt_rand(), true)); } // 清洗html代码的空白符号 function clear_html_blank($string) { $string = str_replace("\r\n", '', $string); // 清除换行符 $string = str_replace("\n", '', $string); // 清除换行符 $string = str_replace("\t", '', $string); // 清除制表符 $string = str_replace(' ', '', $string); // 清除大空格 $string = str_replace(' ', '', $string); // 清除   $string = preg_replace('/\s+/', ' ', $string); // 清除空格 return $string; } // 去除字符串两端斜线 function trim_slash($string) { return trim($string, '/'); } // 驼峰转换下划线加小写字母 function hump_to_underline($string) { return strtolower(preg_replace('/(?<=[a-z])([A-Z])/', '_$1', $string)); } // 转换对象为数组 function object_to_array($object) { if($object === null){ return []; }else{ return json_decode(json_encode($object),true); } } // 转换数组为对象 function array_to_object($array) { return json_decode(json_encode($array)); } // 值是否在对象中 function in_object($needle, $object) { foreach ($object as $value) { if ($needle == $value) return true; } } // 结果集中查找指定字段父节点是否存在 function result_value_search($needle, $result, $skey) { foreach ($result as $key => $value) { if ($value->$skey == $needle) { return $key; } } return false; } // 多维数组合并 function mult_array_merge($array1, $array2) { if (is_array($array2)) { foreach ($array2 as $key => $value) { if (is_array($value)) { if (array_key_exists($key, $array1)) { $array1[$key] = mult_array_merge($array1[$key], $value); } else { $array1[$key] = $value; } } else { $array1[$key] = $value; } } } return $array1; } // 数组转换为带引号字符串 function implode_quot($glue, array $pieces, $diffnum = false) { if (! $pieces) return "''"; foreach ($pieces as $key => $value) { if ($diffnum && ! is_numeric($value)) { $value = "'$value'"; } elseif (! $diffnum) { $value = "'$value'"; } if (isset($string)) { $string .= $glue . $value; } else { $string = $value; } } return $string; } // 是否为多维数组,是返回true function is_multi_array($array) { if (is_array($array)) { return (count($array) != count($array, 1)); } else { return false; } } // 是否为移动设备 function is_mobile() { $os = get_user_os(); if ($os == 'Android' || $os == 'iPhone' || $os == 'Windows Phone' || $os == 'iPad') { return true; } } // 是否为POST请求 function is_post() { if ($_POST) { return true; } else { return false; } } // 是否为GET请求 function is_get() { if ($_GET) { return true; } else { return false; } } // 是否为PUT请求 function is_put() { if ($_SERVER['REQUEST_METHOD'] == 'PUT') { return true; } else { return false; } } // 是否为PATCH请求 function is_patch() { if ($_SERVER['REQUEST_METHOD'] == 'PATCH') { return true; } else { return false; } } // 是否为DELETE请求 function is_delete() { if ($_SERVER['REQUEST_METHOD'] == 'DELETE') { return true; } else { return false; } } // 是否为AJAX请求 function is_ajax() { if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { return true; } else { return false; } } // 判断当前是否为https function is_https() { if ((isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on')) { return true; } elseif (isset($_SERVER['REQUEST_SCHEME']) && strtolower($_SERVER['REQUEST_SCHEME']) == 'https') { return true; } elseif (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) == 'https') { return true; } elseif (isset($_SERVER['HTTP_X_CLIENT_SCHEME']) && strtolower($_SERVER['HTTP_X_CLIENT_SCHEME']) == 'https') { return true; } else { return false; } } // 获取当前访问地址 function get_http_url($noport = false) { if (is_https()) { $url = 'https://' . $_SERVER['HTTP_HOST']; } else { $url = 'http://' . $_SERVER['HTTP_HOST']; } if ($noport) { $url = str_replace(':' . $_SERVER['SERVER_PORT'], '', $url); } return $url; } // 获取当前访问域名 function get_http_host($noport = true) { if ($noport) { return str_replace(':' . $_SERVER['SERVER_PORT'], '', $_SERVER['HTTP_HOST']); } else { return $_SERVER['HTTP_HOST']; } } // 服务器信息 function get_server_info() { // 定义输出常量 define('YES', 'Yes'); define('NO', 'No'); // 服务器系统 $data['php_os'] = PHP_OS; // 服务器访问地址 $data['http_host'] = $_SERVER['HTTP_HOST']; // 服务器名称 $data['server_name'] = $_SERVER['SERVER_NAME']; // 服务器端口 $data['server_port'] = $_SERVER['SERVER_PORT']; // 服务器地址 $data['server_addr'] = isset($_SERVER['LOCAL_ADDR']) ? $_SERVER['LOCAL_ADDR'] : $_SERVER['SERVER_ADDR']; // 服务器软件 $data['server_software'] = $_SERVER['SERVER_SOFTWARE']; // 站点目录 $data['document_root'] = isset($_SERVER['DOCUMENT_ROOT']) ? $_SERVER['DOCUMENT_ROOT'] : DOC_PATH; // PHP版本 $data['php_version'] = PHP_VERSION; // 数据库驱动 $data['db_driver'] = Config::get('database.type'); // php配置文件 $data['php_ini'] = @php_ini_loaded_file(); // 最大上传 $data['upload_max_filesize'] = ini_get('upload_max_filesize'); // 最大提交 $data['post_max_size'] = ini_get('post_max_size'); // 最大提交文件数 $data['max_file_uploads'] = ini_get('max_file_uploads'); // 内存限制 $data['memory_limit'] = ini_get('memory_limit'); // 检测gd扩展 $data['gd'] = extension_loaded('gd') ? YES : NO; // 检测imap扩展 $data['imap'] = extension_loaded('imap') ? YES : NO; // 检测socket扩展 $data['sockets'] = extension_loaded('sockets') ? YES : NO; // 检测curl扩展 $data['curl'] = extension_loaded('curl') ? YES : NO; // 会话保存路径 $data['session_save_path'] = session_save_path() ?: $_SERVER['TMP']; // 检测standard库是否存在 $data['standard'] = extension_loaded('standard') ? YES : NO; // 检测多线程支持 $data['pthreads'] = extension_loaded('pthreads') ? YES : NO; // 检测XCache支持 $data['xcache'] = extension_loaded('XCache') ? YES : NO; // 检测APC支持 $data['apc'] = extension_loaded('APC') ? YES : NO; // 检测eAccelerator支持 $data['eaccelerator'] = extension_loaded('eAccelerator') ? YES : NO; // 检测wincache支持 $data['wincache'] = extension_loaded('wincache') ? YES : NO; // 检测ZendOPcache支持 $data['zendopcache'] = extension_loaded('Zend OPcache') ? YES : NO; // 检测memcache支持 $data['memcache'] = extension_loaded('memcache') ? YES : NO; // 检测memcached支持 $data['memcached'] = extension_loaded('memcached') ? YES : NO; // 已经安装模块 $loaded_extensions = get_loaded_extensions(); $extensions = ''; foreach ($loaded_extensions as $key => $value) { $extensions .= $value . ', '; } $data['extensions'] = $extensions; return json_decode(json_encode($data)); } // 获取数据库类型 function get_db_type() { switch (Config::get('database.type')) { case 'mysqli': case 'pdo_mysql': $db = 'mysql'; break; case 'sqlite': case 'pdo_sqlite': $db = 'sqlite'; break; case 'pdo_pgsql': $db = 'pgsql'; break; default: $db = null; } return $db; } // 获取间隔的月份的起始及结束日期 function get_month_days($date, $start = 0, $interval = 1, $retamp = false) { $timestamp = strtotime($date) ?: $date; $first_day = strtotime(date('Y', $timestamp) . '-' . date('m', $timestamp) . '-01 +' . $start . ' month'); $last_day = strtotime(date('Y-m-d', $first_day) . ' +' . $interval . ' month -1 day'); if ($retamp) { $return = array( 'first' => $first_day, 'last' => $last_day ); } else { $return = array( 'first' => date('Y-m-d', $first_day), 'last' => date('Y-m-d', $last_day) ); } return $return; } // 框架地址地址前缀 function url_index_path($indexfile = null) { $indexfile = $indexfile ?: $_SERVER["SCRIPT_NAME"]; if (Config::get('app_url_type') == 2 && strripos($indexfile, 'index.php') !== false) { return SITE_DIR; } elseif (Config::get('app_url_type') == 3 && strripos($indexfile, 'index.php') !== false) { return SITE_DIR . '/?p='; } elseif (Config::get('app_url_type') == 3 && strripos($indexfile, 'index.php') === false) { return $indexfile . '?p='; } else { return $indexfile; } } // 获取服务端web软件 function get_server_soft() { $soft = strtolower($_SERVER["SERVER_SOFTWARE"]); if (strpos($soft, 'iis')) { return 'iis'; } elseif (strpos($soft, 'apache')) { return 'apache'; } elseif (strpos($soft, 'nginx')) { return 'nginx'; } else { return 'other'; } } // 创建会话层级目录 function create_session_dir($path, $depth) { if ($depth < 1) { return; } else { $depth --; } $char = array( 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' ); foreach ($char as $value) { if (! check_dir($path . '/' . $value, true)) { error('会话目录写入权限不足!'); } create_session_dir($path . '/' . $value, $depth); } } // 中英混合的字符串截取,以一个汉字为一个单位长度,英文为半个 function substr_both($string, $strat, $length) { $s = 0; // 起始位置 $i = 0; // 实际Byte计数 $n = 0; // 字符串长度计数 $str_length = strlen($string); // 字符串的字节长度 while (($n < $length) and ($i < $str_length)) { $ascnum = Ord(substr($string, $i, 1)); // 得到字符串中第$i位字符的ascii码 if ($ascnum >= 224) { // 根据UTF-8编码规范,将3个连续的字符计为单个字符 $i += 3; $n ++; } elseif ($ascnum >= 192) { // 根据UTF-8编码规范,将2个连续的字符计为单个字符 $i += 2; $n ++; } else { $i += 1; $n += 0.5; } if ($s == 0 && $strat > 0 && $n >= $strat) { $s = $i; // 记录起始位置 } } if ($n < $strat) { // 起始位置大于字符串长度 return; } return substr($string, $s, $i); } // 中英混合的字符串长度,以一个汉字为一个单位长度,英文为半个 function strlen_both($string) { $i = 0; // 实际Byte计数 $n = 0; // 字符串长度计数 $str_length = strlen($string); // 字符串的字节长度 while ($i < $str_length) { $ascnum = Ord(substr($string, $i, 1)); // 得到字符串中第$i位字符的ascii码 if ($ascnum >= 224) { // 根据UTF-8编码规范,将3个连续的字符计为单个字符 $i += 3; $n ++; } elseif ($ascnum >= 192) { // 根据UTF-8编码规范,将2个连续的字符计为单个字符 $i += 2; $n ++; } else { $i += 1; $n += 0.5; } } return $n; } // 获取地址参数 function query_string($unset = null) { if (isset($_SERVER["QUERY_STRING"]) && ! ! $qs = $_SERVER["QUERY_STRING"]) { parse_str($qs, $output); unset($output['page']); $unset = strpos($unset, ',') ? explode(',', $unset) : $unset; if (is_array($unset)) { foreach ($unset as $value) { if (isset($output[$value])) { unset($output[$value]); } } } else { if (isset($output[$unset])) { unset($output[$unset]); } } // 避免路径参数编码 if (isset($output['p'])) { $p = 'p=' . $output['p']; unset($output['p']); $qs = $output ? $p . '&' . http_build_query($output) : $p; } else { $qs = http_build_query($output); } } return $qs ? '?' . $qs : ''; } // 判断是否在子网 function network_match($ip, $network) { if (strpos($network, '/') > 0) { $network = explode('/', $network); $move = 32 - $network[1]; if ($network[1] == 0) { return true; } return ((ip2long($ip) >> $move) === (ip2long($network[0]) >> $move)) ? true : false; } elseif ($network == $ip) { return true; } else { return false; } } // 递归替换 function preg_replace_r($search, $replace, $subject) { while (preg_match($search, $subject)) { $subject = preg_replace($search, $replace, $subject); } return $subject; } // 生成随机验证码 function create_code($len = 4) { $charset = 'ABCDEFGHKMNPRTUVWXY23456789'; $charset = str_shuffle($charset); $charlen = strlen($charset) - 1; $code = ''; for ($i = 0; $i < $len; $i ++) { $code .= $charset[mt_rand(0, $charlen)]; } return $code; }