<?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;
}
?>