全局函数文件
<?php /** * @copyright 2011 * @description: 全局函数文件 * @file: global.function.php * @author: Huang Xiang * @charset: UTF-8 * @time: 2011-09-19 14:41:53 * @version 1.0 **/ /** * @name: is_empty * @description: 检测变量是否为空 * @param: mixed 需要判断变量 * @return: boolean * @author: Huang Xiang * @create: 2011-09-19 14:43:15 **/ function is_empty($var_name){ $return = FALSE; !isset($var_name) && $return = TRUE; if(!$return){ switch(strtolower(gettype($var_name))){ case 'null' :{ $return = TRUE;BREAK; } case 'integer' :{ $return = FALSE;BREAK; } case 'double' :{ $return = FALSE;BREAK; } case 'boolean' :{ $return = FALSE;BREAK; } case 'string' :{ $return = $var_name==='' ? TRUE : FALSE;BREAK; } case 'array' :{ $return = count($var_name) > 0 ? FALSE : TRUE;BREAK; } case 'object' :{ $return = $var_name===null ? TRUE : FALSE;BREAK; } case 'resource' :{ $return = $var_name===null ? TRUE : FALSE;BREAK; } default :{ $return = TRUE; } } } return $return; } /** * @name: is_type * @description: 检测变量类型是否为指定 * @param: mixed 需要判断变量 * @param: string 判断的类别 * @return: boolean * @author: Huang Xiang * @create: 2011-09-19 14:45:23 **/ function is_type($var_name, $var_type){ $return = FALSE; $var_name_resource_type = NULL; $var_name_type = strtolower(gettype($var_name)); $var_name_type == 'resource' && $var_name_resource_type = strtolower(get_resource_type($var_name)); $var_typeType = strtolower(gettype($var_type)); if($var_typeType == 'array'){ if(count($var_type) > 0){ foreach($var_type as $key => $Val){ $var_type[$key] = strtolower($Val); } } $return = in_array($var_name_type, $var_type, TRUE) ? TRUE : FALSE; (!$return && !is_empty($var_name_resource_type)) && $return = in_array($var_name_type.'-'.$var_name_resource_type, $var_type, TRUE) ? TRUE : FALSE; } $var_typeType == 'string' && $return = ($var_name_type == strtolower($var_type) || $var_name_type.'-'.$var_name_resource_type == strtolower($var_type)) ? TRUE : FALSE; return $return; } /** * @name: is_exists * @description: 判断是否存在[变量、类、接口、类方法、函数、文件、路径] * @param: mixed 需要判断变量 * @param: string 检测类型 default[var] * @param: object 类对象 default[NULL] * @return: boolean * @author: Huang Xiang * @create: 2011-09-19 15:00:47 **/ function is_exists($var_name, $var_type='var', $object=NULL){ $return = FALSE; switch(strtolower(trim($var_type))){ case 'var' : { $return = isset($var_name) ? TRUE : FALSE; BREAK;} case 'file' : { $return = file_exists($var_name) ? TRUE : FALSE; BREAK;} case 'function' : { $return = function_exists($var_name) ? TRUE : FALSE; BREAK;} case 'class' : { $return = class_exists($var_name) ? TRUE : FALSE; BREAK;} case 'interface': { $return = interface_exists($var_name) ? TRUE : FALSE; BREAK;} case 'method' : { $return = method_exists($object, $var_name) ? TRUE : FALSE; BREAK;} case 'dir' : { $return = is_dir($var_name) ? TRUE : FALSE; $return && $return = is_exists($var_name, 'file', $object); BREAK; } } return $return; } /** * @name: is_include * @description: 文件是否被引入 * @param: string 引入的文件全路径 * @return: boolean * @author: Huang Xiang * @create: 2011-09-21 11:56:10 **/ function is_include($include_file){ return in_array($include_file, get_included_files(), TRUE) ? TRUE : FALSE; } /** * @name: get_cur_time * @description: 获取当前时间 * @param: boolean 返回是否字符串[FALSE] * @return: array * @author: Huang Xiang * @create: 2011-09-19 17:39:55 **/ function get_cur_time($is_string=FALSE){ $cur_time = microtime(); return $is_string ? $cur_time : array(doubleval(substr($cur_time, 0, 10)), intval(substr($cur_time, 11, 10))); } /** * @name: time_array * @description: 字符串转换成数组 * @param: string 时间字符串[microtime] * @return: array * @author: Huang Xiang * @create: 2011-10-05 21:42:31 **/ function time_array($string){ return array(doubleval(substr($string, 0, 10)), intval(substr($string, 11, 10))); } /** * @name: time_diff * @description: 计算时间差 * @param: array 开始时间 * @param: array 结束时间按 * @param: integer 取小数点位 * @return: double * @author: Huang Xiang * @create: 2011-09-19 17:40:49 **/ function time_diff($time_form, $time_to=NULL, $point=10){ $return = 0.0; is_empty($time_to) && $time_to = get_cur_time(); is_type($time_form, 'string') && $time_form = time_array($time_form); if(is_empty($time_form) || !is_type($time_form, 'array')) return FALSE; $return = ($time_to[0]-$time_form[0])+($time_to[1]-$time_form[1]); return sprintf("%.".$point."f", $return); } /** * @name: var_string * @description: 将变量转换成字符串 * @param: mixed 变量 * @return: string * @author: Huang Xiang * @create: 2011-09-20 10:43:54 **/ function var_string($value){ switch(strtolower(gettype($value))){ case 'null' : { return NULL; BREAK; } case 'integer' : { settype($value, 'string'); return $value; BREAK;} case 'double' : { settype($value, 'string'); return $value; BREAK; } case 'string' : { return '"'.$value.'"'; BREAK;} case 'array' : { $return = ''; $i = 0; foreach($value as $key => $val){ $return .= ($return == '' ? '' : ', '); $return .= (gettype($key) == 'integer' ? $key : '"'.$key.'"'); $return .= ' => '; $tmp_type = gettype($val); $return .= ($tmp_type == 'array' ? var_string($val) : ($tmp_type == 'integer' ? $val : '"'.$val.'"')); } return 'Array('.$return.')'; } case 'object' :{ settype($value, 'string'); return $value; } case 'resource' :{ settype($value, 'string'); return $value; } case 'boolean' :{ return $value ? 'TRUE' : 'FALSE'; } } return TRUE; } /** * @name: get_rand_string * @description: 获取随机字符串 * @param: integer 随机字符的长度 * @param: integer 随机字符的模式 default[7],1-15 * @param: boolean 是否去除字符 default[FALSE] O,o,0 * @return: string * @author: Huang Xiang * @create: 2011-09-20 10:51:02 **/ function get_rand_string($leng, $type=7, $dark=FALSE){ $tmp_array = array( '1' => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', '2' => 'abcdefghijklmnopqrstuvwxyz', '4' => '0123456789', '8' => '~!@$&()_+-=,./<>?;\'\\:"|[]{}`' ); $return = $target_string = ''; $array = array(); $bin_string = decbin($type); $bin_leng = strlen($bin_string); for($i = 0; $i < $bin_leng; $i++) if($bin_string{$i} == 1) $array[] = pow(2, $bin_leng - $i - 1); if(in_array(1, $array, TRUE)) $target_string .= $tmp_array['1']; if(in_array(2, $array, TRUE)) $target_string .= $tmp_array['2']; if(in_array(4, $array, TRUE)) $target_string .= $tmp_array['4']; if(in_array(8, $array, TRUE)) $target_string .= $tmp_array['8']; $target_leng = strlen($target_string); mt_srand((double)microtime()*1000000); while(strlen($return) < $leng){ $tmp_string = substr($target_string, mt_rand(0, $target_leng), 1); $dark && $tmp_string = (in_array($tmp_string, array('0', 'O', 'o'))) ? '' : $tmp_string; $return .= $tmp_string; } return $return; } /** * @name: en_de_code * @description: 加密解密数据 * @param: string 被加密or解密的字符串 * @param: string 加密or解密关键key default[123456] * @param: integer 加密or解密 default[1],1-加密,2-解密 * @return: string * @author: Huang Xiang * @create: 2011-09-20 11:30:52 **/ function en_de_code($string, $key='', $types=1){ ($key = trim($key)) && is_empty($key) && $key = '123456'; $key = md5($key); $key_leng = strlen($key); if($key_leng == 0) return FALSE; $string = $types != 1 ? base64_decode($string):substr(md5($string.$key), 0, 8).$string; $stringLeng = strlen($string); $rndkey = $box = array(); $result = ''; for($i = 0; $i <= 255; $i++){ $rndkey[$i] = ord($key[$i % $key_leng]); $box[$i] = $i; } for($j = $i = 0; $i < 256; $i++){ $j = ($j + $box[$i] + $rndkey[$i]) % 256; $tmp = $box[$i]; $box[$i] = $box[$j]; $box[$j] = $tmp; } for($a = $j = $i = 0; $i < $stringLeng; $i++){ $a = ($a + 1) % 256; $j = ($j + $box[$a]) % 256; $tmp = $box[$a]; $box[$a] = $box[$j]; $box[$j] = $tmp; $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256])); } if($types != 1){ if(substr($result,0,8) == substr(md5(substr($result, 8).$key), 0, 8)) { return substr($result, 8); }else{ return ''; } }else{ return str_replace('=', '', base64_encode($result)); } } /** * @name: icon_var * @description: 转换字符串编码 * @param: string 被转换的原字符串 * @param: string 被转换的类型 default[gb2312,utf8,i] * @return: string * @author: Huang Xiang * @create: 2011-09-20 14:01:17 **/ function icon_var($string, $type='gb2312,utf8,i'){ $type_array = explode(',', $type); $type_leng = count($type_array); if($type_leng != 2 && $type_leng != 3) return FALSE; $form = strtoupper(trim($type_array[0])); $to = strtoupper(trim($type_array[1])); $prame = ''; $type_leng == 3 && ($prame = '//'.(strtoupper(trim($type_array[2]))=='t'?'TRANSLIT':'IGNORE')); return iconv($form, $to.$prame, $string); } /** * @name: get_var_get * @description: GET方式获取表单数据 * @param: string 表单name参数名称 * @param: boolean 是否过滤字符串安全 * @return: mixed * @author: Huang Xiang * @create: 2011-09-20 18:19:01 **/ function get_var_get($var_name, $is_filter=TRUE){ $return = isset($_GET[$var_name]) ? $_GET[$var_name] : NULL; if($is_filter && !is_empty($return)) $return = filter_string($return); return $return; } /** * @name: get_var_post * @description: POST方式获取表单数据 * @param: string 表单name参数名称 * @param: boolean 是否过滤字符串安全 * @return: mixed * @author: Huang Xiang * @create: 2011-09-20 18:24:00 **/ function get_var_post($var_name, $is_filter=TRUE){ $return = isset($_POST[$var_name]) ? $_POST[$var_name] : NULL; if($is_filter && !is_empty($return)) $return = filter_string($return); return $return; } /** * @name: get_var_value * @description: 获取表单数据(GET 和 POST) * @param: string 表单name参数名称 * @param: boolean 是否过滤字符串安全 * @param: boolean 是否优先获取POST * @return: mixed * @author: Huang Xiang * @create: 2011-09-20 18:24:23 **/ function get_var_value($var_name, $is_filter=TRUE, $is_post=TRUE){ $return = NULL; if($is_post){ $return = get_var_post($var_name, $is_filter); $return === NULL && $return = get_var_get($var_name, $is_filter); }else{ $return = get_var_get($var_name, $is_filter); $return === NULL && $return = get_var_post($var_name, $is_filter); } return $return; } /** * @name: get_ip * @description: 获取客户端IP地址 * @return: string * @author: Huang Xiang * @create: 2011-09-20 18:26:23 **/ function get_ip(){ if($_SERVER['REMOTE_ADDR']) return $_SERVER['REMOTE_ADDR']; elseif($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]) return $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]; elseif($HTTP_SERVER_VARS["HTTP_CLIENT_IP"]) return $HTTP_SERVER_VARS["HTTP_CLIENT_IP"]; elseif($HTTP_SERVER_VARS["REMOTE_ADDR"]) return $HTTP_SERVER_VARS["REMOTE_ADDR"]; elseif(getenv("HTTP_X_FORWARDED_FOR")) return getenv("HTTP_X_FORWARDED_FOR"); elseif(getenv("HTTP_CLIENT_IP")) return getenv("HTTP_CLIENT_IP"); elseif(getenv("REMOTE_ADDR")) return getenv("REMOTE_ADDR"); else return '127.0.0.1'; } /** * @name: time_int * @description: 转换时间成整形 * @param: string 被转换时间 * @return: integer * @author: Huang Xiang * @create: 2011-09-20 18:26:50 **/ function time_int($time_string){ $return = FALSE; if(preg_match('/^(\d{4})-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/', $time_string, $match)){ if(!isset($match[3])) return FALSE; $return = mktime($match[4], $match[5], $match[6], $match[2], $match[3], $match[1]); } return $return; } /** * @name: get_var_name * @description: 获取变量的名字[引用变量返回数组] * @param: mixed 变量的值 * @param: mixed 变量的作用域 default[GLOBALS] * @return: string * @author: Huang Xiang * @create: 2011-09-20 18:31:22 **/ function get_var_name(&$var_name, $scope=NULL){ $return = FALSE; is_empty($scope) && $scope = $GLOBALS; $tmp = $var_name; $var_name = 'varname_isexists_'.mt_rand(); $return = array_keys($scope, $var_name, TRUE); $var_name = $tmp; (is_type($return, 'array') && count($return) == 1) && $return = $return[0]; return $return; } /** * @name: file_size_string * @description: 计算文件格式单位 * @param: integer 被转换的数字 * @param: integer 小数点位数 default[2]2位小数点 * @param: integer 进制单位大小 default[1024] * @param: integer 取整类型 default[0]0-四舍五入,1-向下取整,2-向上取整 * @return: string * @author: Huang Xiang * @create: 2011-09-20 18:44:27 **/ function file_size_string($file_size, $decim=2, $units=1024, $val_crf=0){ $tmp_array = array('B', 'KB', 'MB', 'GB', 'TB', 'PB'); $i = 1; $j = count($tmp_array); $decim_pow = pow(10, $decim); while($file_size >= pow($units, $i) && $i <= $j) ++$i; if($val_crf == 2){ return ceil(($file_size/pow($units, $i-1))*$decim_pow)/$decim_pow.' '.$tmp_array[$i-1]; }else if($val_crf == 1){ return round(($file_size/pow($units, $i-1))*$decim_pow)/$decim_pow.' '.$tmp_array[$i-1]; }else{ return floor(($file_size/pow($units, $i-1))*$decim_pow)/$decim_pow.' '.$tmp_array[$i-1]; } } /** * @name: read_file_dir * @description: 读取文件目录 * @param: string 读取的目录 * @param: integer 读取的目录的深度 [-1读取所有, default:-1] * @param: array 上次的目录 ***请不要提供任何参数*** * @return: array * @author: Huang Xiang * @create: 2011-09-20 18:42:00 **/ function read_file_dir($folder_url, $level=-1, $array=NULL){ $suffix = substr($folder_url, strlen($folder_url)-1, 1); if($suffix != '/' && $suffix != "\\") return FALSE; if(!is_dir($folder_url)) return FALSE; if(!$dir_handle = opendir($folder_url)) return FALSE; $return = array(); $folder_size = 0; while($folder_file = readdir($dir_handle)){ if($folder_file == '.' || $folder_file == '..') continue; $file_stat = stat($folder_url.$folder_file); if(is_dir($folder_url.$folder_file)){ $return['folder'][] = array( 'name' => $folder_file, 'url' => $folder_url.$folder_file.$suffix, 'size' => '0 B', 'time' => date('Y-n-d H:i:s',$file_stat['mtime']), 'mtime' => $file_stat['mtime'] ); }else{ if(!is_empty($array)) $folder_size += $file_stat['size']; $return['file'][] = array( 'name' => $folder_file, 'url' => $folder_url.$folder_file, 'size' => file_size_string($file_stat['size']), 'time' => date('Y-n-d H:i:s',$file_stat['mtime']), 'mtime' => $file_stat['mtime'] ); } } !is_empty($dir_handle) && closedir($dir_handle); if($level >= 0 || $level == -1){ if(!is_empty($array)){ $array['size'] = file_size_string($folder_size); if($level == 0) return $return; } if($level != -1) --$level; if(isset($return['folder']) && !is_empty($return['folder'])) foreach($return['folder'] as $key => $val) $return['folder'][$key]['ls'] = read_file_dir($val['url'], $level, &$return['folder'][$key]); } return $return; } /** * @name: hex_bin * @description: 十六进制转二进制 * @param: string 被转换字符串 * @return: string * @author: Huang Xiang * @create: 2011-09-20 18:54:05 **/ function hex_bin($string){ $return = ''; $length = strlen($string); for($i = 0; $i < $length; $i += 2) $return .= pack('C', hexdec(substr($string, $i, 2))); return $return; } /** * @name: get_content * @description: 获取文件或远程地址的内容 * @param: string 文件路径或远程地址 * @param: boolean 是否是本地文件 * @param: integer 读取行数 默认全部 * @param: integer 读取开始行数 默认开始 * @return: string * @author: Huang Xiang * @create: 2011-09-20 18:55:19 **/ function get_content($url, $is_file=TRUE, $line=0, $start=0){ $return = ''; if($is_file && !is_exists($url, 'file')) return FALSE; if(!($fopen = fopen($url, 'r'))) return FALSE; $i = $j = 0; while($tmp_string = fgets($fopen)){ if($i >= $start){ if($line > 0 && $line <= $j) BREAK; $return .= $tmp_string; $j++; } $i++; } if($fopen) fclose($fopen); return $return; } /** * @name: long_ip * @description: 长整型转成ip地址 * @param: integer 数字 * @return: string * @author: Huang Xiang * @create: 2011-09-20 18:59:05 **/ function long_ip($ip_long){ return long2ip($ip_long); } /** * @name: ip_long * @description: ip地址转成长整型 * @param: string ip地址 * @return: integer * @author: Huang Xiang * @create: 2011-09-20 19:00:05 **/ function ip_long($ip_string){ $return = 0; $tmp_array = explode('.', $ip_string); foreach($tmp_array as $key => $val) $return += intval($val)*pow(256, abs($key-3)); return $return; } /** * @name: load_file * @description: 引入文件 * @param: string 引入文件名称 * @param: boolean 引入是否必须 [default-TRUE] * @param: boolean 引入类型 [default-TRUE(include)] * @param: boolean 引入是否唯一 [default-TRUE] * @param: string 被声明的全局变量[,分隔符] [default] * @return: boolean * @author: Huang Xiang * @create: 2011-09-20 19:04:06 **/ function load_file($file_url, $is_must=TRUE, $is_include=TRUE, $is_once=TRUE, $global_var=''){ if(!is_exists($file_url, 'file')){ return $is_must ? FALSE : TRUE; } !is_empty($global_var) && eval('global '.$global_var.';'); if($is_include){ $is_once && include_once($file_url); !$is_once && include($file_url); }else{ $is_once && require_once($file_url); !$is_once && require($file_url); } return TRUE; } /** * @name: shift_right * @description: 无符号右移位 * @param: integer 被移动值 * @param: integer 移动的位数 * @return: integer * @author: Huang Xiang * @create: 2011-09-20 19:04:57 **/ function shift_right($var_int, $move_int){ !defined('STR_PAD_LEFT') && define('STR_PAD_LEFT', 0); if($move_int <= 0) return $var_int; if($move_int >= 32) return 0; $var_int = decbin($var_int); $var_int_leng = strlen($var_int); if($var_int_leng > 32){ $var_int = substr($var_int, $var_int_leng-32, 32); }elseif($var_int_leng < 32){ $var_int = str_pad($var_int, 32, '0', STR_PAD_LEFT); } return bindec(str_pad(substr($var_int, 0, 32-$move_int), 32, '0', STR_PAD_LEFT)); } /** * @name: shift_left * @description: 无符号左移位 * @param: integer 被移动值 * @param: integer 移动的位数 * @return: integer * @author: Huang Xiang * @create: 2011-09-20 19:06:28 **/ function shift_left($var_int, $move_int){ !defined('STR_PAD_LEFT') && define('STR_PAD_LEFT', 0); !defined('STR_PAD_RIGHT') && define('STR_PAD_RIGHT', 1); if($move_int <= 0) return $var_int; if($move_int >= 32) return 0; $var_int = decbin($var_int); $var_int_leng = strlen($var_int); if($var_int_leng > 32){ $var_int = substr($var_int, $var_int_leng-32, 32); }elseif($var_int_leng < 32){ $var_int = str_pad($var_int, 32, '0', STR_PAD_LEFT); } return bindec(str_pad(substr($var_int, $move_int), 32, '0', STR_PAD_RIGHT)); } /** * @name: get_array_num * @description: 返回数组的深度数 * @param: array 检测的数组 * @param: integer 当前计算深度 default[1] * @return: integer * @author: Huang Xiang * @create: 2011-09-20 19:07:13 **/ function get_array_num($array, $i=1){ if(!is_type($array, 'array')) return FALSE; $i = $i < 1 ? 1 : $i; $return = $i; if(!is_empty($array)){ foreach($array as $val){ if(is_type($val, 'array')){ $return = max($i, $return, get_array_num($val, $i+1)); } } } return $return; } /** * @name: get_array_sum * @description: 返回数组的全部个数 * @param: array 检测的数组 * @return: integer * @author: Huang Xiang * @create: 2011-09-20 19:09:37 **/ function get_array_sum($array){ if(!is_type($array, 'array')) return FALSE; $return = 1; if(!is_empty($array)){ foreach($array as $val){ if(is_type($val, 'array')){ $return += get_array_sum($val); } } } return $return; } /** * @name: check_data * @description: 检测数据规则 * @param: string 被检测的原字符串 * @param: string 被检测的类型 * @return: boolean * @author: Huang Xiang * @create: 2011-09-20 19:10:38 **/ function check_data($string, $type='email'){ $return = FALSE; switch($type){ case 'email' :{ $return = preg_match("/^(\w+[-+.]*\w+)*@(\w+([-.]*\w+)*\.\w+([-.]*\w+)*)$/", $string); BREAK; } case 'http' :{ $return = preg_match("/^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"])*$/", $string); BREAK; } case 'qq' :{ $return = preg_match("/^[1-9]\d{4,10}$/", $string); BREAK; } case 'post' :{ $return = preg_match("/^[1-9]\d{5}$/", $string); BREAK; } case 'idnum' :{ $return = preg_match("/^\d{15}(\d{2}[A-Za-z0-9])?$/", $string); BREAK; } case 'china' :{ $return = ereg("^[".chr(0xa1)."-".chr(0xff)."]+$", $string); BREAK; } case 'english' :{ $return = preg_match("/^[A-Za-z]+$/", $string); BREAK; } case 'mobile' :{ $return = preg_match("/^((\(\d{3}\))|(\d{3}\-))?((13)|(15)|(18)){1}\d{9}$/", $string); BREAK; } case 'phone' :{ $return = preg_match("/^((\(\d{3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}$/", $string); BREAK; } case 'safe' :{ $return = preg_match("/^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/", $string) != 0 ? TRUE : FALSE; BREAK; } case 'age' :{ $return = (ereg("^(-{0,1}|\+{0,1})[0-9]+(\.{0,1}[0-9]+)$", $string) && intval($string) <= 130 && intval($string) >= 12) ? TRUE : FALSE; BREAK; } case 'eng_num' :{ $return = ereg("^[A-Za-z0-9]+$", $string); BREAK; } case 'password' :{ $return = (ereg("^[A-Za-z0-9]+$", $string) && strlen($string) <= 32 && strlen($string) >= 6) ? TRUE : FALSE; BREAK; } case 'datetime' :{ $return = preg_match('/^[\d]{4}-[\d]{1,2}-[\d]{1,2}\s[\d]{1,2}:[\d]{1,2}:[\d]{1,2}$/', $string); BREAK; } case 'datetimes':{ $return = preg_match('/^[\d]{4}-[\d]{2}-[\d]{2}\s[\d]{2}:[\d]{2}:[\d]{2}$/', $string); BREAK; } case 'date' :{ $return = preg_match('/^[\d]{4}-[\d]{1,2}-[\d]{1,2}$/', $string); BREAK; } case 'dates' :{ $return = preg_match('/^[\d]{4}-[\d]{2}-[\d]{2}$/', $string); BREAK; } case 'time' :{ $return = preg_match('/^[\d]{1,2}:[\d]{1,2}:[\d]{1,2}$/', $string); BREAK; } case 'times' :{ $return = preg_match('/^[\d]{2}:[\d]{2}:[\d]{2}$/', $string); BREAK; } case 'ip' :{ $return = preg_match("/^\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b$/", $string); BREAK; } } gettype($return) == 'integer' && $return = $return == 0 ? FALSE : TRUE; return $return; } /** * @name: xml_array * @description: XML转成数组 * @param: string Xml字符串 * @param: boolean 是否启用 attribute default[FALSE] * @return: array * @author: Huang Xiang * @create: 2011-09-20 18:49:57 **/ function xml_array($xml_string, $attribute=FALSE){ $return = array(); $search = $attribute ? '|<((\S+)(.*))\s*>(.*)</\2>|Ums' : '|<((\S+)()).*>(.*)</\2>|Ums'; $xml_string = preg_replace('|>\s*<|', ">\n<", $xml_string); $xml_string = preg_replace('|<\?.*\?>|', '', $xml_string); $xml_string = preg_replace('|<(\S+?)(.*)/>|U', '<$1$2></$1>', $xml_string); if(!preg_match_all($search, $xml_string, $match) || is_empty($match[1])) return FALSE; foreach($match[1] as $key => $val){ if(!isset($return[$val])) $return[$val] = array(); $return[$val][] = xml_array($match[4][$key], $attribute); } return $return; } /** * @name: sql_normalize * @description: 处理sql语句条件 * @param: string 处理的sql * @return: string * @author: Huang Xiang * @create: 2011-09-20 19:15:46 **/ function sql_normalize($sql){ $sql = preg_replace("/\\/\\*.*\\*\\//sU", '', $sql); // remove multiline comments $sql = preg_replace("/([\"'])(?:\\\\.|\"\"|''|.)*\\1/sU", "{}", $sql); // remove quoted strings $sql = preg_replace("/(\\W)(?:-?\\d+(?:\\.\\d+)?)/", "\\1{}", $sql); // remove numbers $sql = preg_replace("/(\\W)null(?:\\Wnull)*(\\W|\$)/i", "\\1{}\\2", $sql); // remove nulls $sql = str_replace(array("\\n", "\\t", "\\0"), ' ', $sql); // replace escaped linebreaks $sql = preg_replace("/\\s+/", ' ', $sql); // remove multiple spaces $sql = preg_replace("/ (\\W)/", "\\1", $sql); // remove spaces bordering with non-characters $sql = preg_replace("/(\\W) /", "\\1", $sql); // --,-- $sql = preg_replace("/\\{\\}(?:,?\\{\\})+/", "{}", $sql); // repetitive {},{} to single {} $sql = preg_replace("/\\(\\{\\}\\)(?:,\\(\\{\\}\\))+/", "({})", $sql); // repetitive ({}),({}) to single ({}) $sql = strtolower(trim($sql, " \t\n)(")); // trim spaces and strolower return $sql; } /** * @name: filter_string * @description: 过滤非安全字符 * @param: mixed 被过滤的原字符串或数组 * @return: mixed * @author: Huang Xiang * @create: 2011-09-20 13:58:47 **/ function filter_string($string){ if(is_empty($string)) return ''; if(is_array($string)){ foreach($string as $key => $val) $string[$key] = filter_string($val); return $string; }else{ $search = array("'<script[^>]*?>.*?</script>'si", "'<[\/\!]*?[^<>]*?>'si", "'([\r\n])[\s]+'", "'&(quot|#34);'i", "'&(amp|#38);'i", "'&(lt|#60);'i", "'&(gt|#62);'i", "'&(nbsp|#160);'i", "'&(iexcl|#161);'i", "'&(cent|#162);'i", "'&(pound|#163);'i", "'&(copy|#169);'i", "'&#(\d+);'e"); $replace = array("", "", "\\1", "\"", "&", "<", ">", " ", chr(161), chr(162), chr(163), chr(169), "chr(\\1)"); return trim(addslashes(nl2br(stripslashes(preg_replace($search, $replace, $string))))); } } /** * @name: up_file * @description: 上传文件 * @param: array 被上传的文件数组信息 * @param: string 上传文件的目录路径和文件名称 * @param: array 允许、不允许上传的文件类型[NULL不限制,array('jpg|png', 'php')] * @param: integer 允许上传的大小[字节,-1不限制] * @param: string 上传文件的目录路径和文件名称备用 * @param: string 上传文件的后缀名[default无,AUTO-自动带点] * @return: string[A-不允许类型,B-拒绝类型文件,S-超过大小,F-文件存在,T-备用文件存在,N(false)-失败,Y-成功] * @author: Huang Xiang * @create: 2011-10-14 15:20:31 **/ function up_file($files, $dest_file, $allow=NULL, $size=-1, $filet=NULL, $annx=NULL){ if(is_empty($files) || !is_type($files, 'array'))return FALSE; if(is_empty($dest_file) || !is_type($dest_file, 'string'))return FALSE; $up_size = intval($files['size']); $up_type = trim($files['type']); $up_name = trim($files['name']); $up_tmp_name = trim($files['tmp_name']); $up_name_annx = strtolower(substr($up_name, strrpos($up_name, '.')+1)); if(!is_empty($annx)){ if(strtoupper(substr($annx, 0, 4)) == 'AUTO'){ if($annx{4} == '+'){ $return = '.'.$up_name_annx.substr($annx, 5); }else{ $return = '.'.$up_name_annx; } $dest_file .= $return; }else{ $dest_file .= $annx; } } if(file_exists($dest_file)){ if(is_empty($filet)){ return 'F'; }else{ if(file_exists($filet) && $dest_file != $filet) return 'T'; $dest_file = $filet; } } if($size >= 0 && $up_size > $size) return 'S'; if(!is_empty($allow)){ if(isset($allow[0]) && !is_empty($allow[0])){ //允许 if($allow[0] != '*'){ $tmp = explode('|', $allow[0]); $rs = FALSE; if(!is_empty($tmp)){ foreach($tmp as $val){ if($val=='*' || in_array($up_name_annx, $tmp)){$rs = TRUE; break;} } } if(!$rs){return 'A';} } } if(isset($allow[1]) && !is_empty($allow[1])){ //拒绝 $tmp = explode('|', $allow[1]); $rs = FALSE; if(!is_empty($tmp)){ foreach($tmp as $val){ if(in_array($up_name_annx, $tmp)){$rs = TRUE; break;} } } if($rs){return 'B';} } } if(@move_uploaded_file($up_tmp_name, $dest_file)){ if(isset($return)){ return $return; }else{ return 'Y'; } }else{ return 'N'; } } /** * @name: object_to_array * @description: 对象转成数组 * @param: object 实例化的对象 * @return: array * @author: Huang Xiang * @create: 2011-10-18 20:03:23 **/ function object_to_array($object){ $array = (Array)$object; foreach($array as $key => $val){ unset($array[$key]); $array[preg_replace('/^.+\0/', '', $key)] = $val; } return $array; } ?>
没有思路的思路是最好的思路