工作中常用 的自定义函数
来源:互联网 发布:淘宝直通车怎么提现 编辑:程序博客网 时间:2024/05/22 04:41
<?phpdefine('CORE_FUNCTION', TRUE);/** * 序列化 * @param mixed $string 原始信息 * @param intval $force * @return mixed */function daddslashes($string, $force = 1) { if(is_array($string)) { $keys = array_keys($string); foreach($keys as $key) { $val = $string[$key]; unset($string[$key]); $string[addslashes($key)] = daddslashes($val, $force); } } else { $string = addslashes($string); } return $string;}function dstripslashes($string) { if(empty($string)) return $string; if(is_array($string)) { foreach($string as $key => $val) { $string[$key] = dstripslashes($val); } } else { $string = stripslashes($string); } return $string;}function dhtmlspecialchars($string, $flags = null) { if(is_array($string)) { foreach($string as $key => $val) { $string[$key] = dhtmlspecialchars($val, $flags); } } else { if($flags === null) { $string = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string); if(strpos($string, '&#') !== false) { $string = preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4}));)/', '&\\1', $string); } } else { if(PHP_VERSION < '5.4.0') { $string = htmlspecialchars($string, $flags); } else { if(strtolower(CHARSET) == 'utf-8') { $charset = 'UTF-8'; } else { $charset = 'ISO-8859-1'; } $string = htmlspecialchars($string, $flags, $charset); } } } return $string;}/** * 批量导入文件 成功则返回 * @param array $array 文件数组 * @param boolean $return 加载成功后是否返回 * @return boolean */function require_array($array,$return=false){ foreach ($array as $file){ if (require_cache($file) && $return) return true; } if($return) return false;}/** * 优化的require_once * @param string $filename 文件地址 * @return boolean */function require_cache($filename) { static $_importFiles = array(); if (!isset($_importFiles[$filename])) { if (file_exists_case($filename)) { require $filename; $_importFiles[$filename] = true; } else { $_importFiles[$filename] = false; } } return $_importFiles[$filename];}/** * 区分大小写的文件存在判断 * @param string $filename 文件地址 * @return boolean */function file_exists_case($filename) { if (is_file($filename)) { if (IS_WIN && APP_DEBUG) { if (basename(realpath($filename)) != basename($filename)) return false; } return true; } return false;}function array_key_case($array) { if(!is_array($array)) return $array; foreach( $array as $key => $value ) { if(is_array($value)) { $array[$key] = array_key_case($value); } else { $array = array_change_key_case($array); } } return $array;}if(!function_exists('array_column')){ function array_column(array $input, $columnKey, $indexKey = null) { $result = array(); if (null === $indexKey) { if (null === $columnKey) { $result = array_values($input); } else { foreach ($input as $row) { $result[] = $row[$columnKey]; } } } else { if (null === $columnKey) { foreach ($input as $row) { $result[$row[$indexKey]] = $row; } } else { foreach ($input as $row) { $result[$row[$indexKey]] = $row[$columnKey]; } } } return $result; }}/** * 获取和设置配置参数 * @param string $name 配置变量 * @param string $file 配置值 * @param string $default 默认值 * @return mixed */function config($name=null, $file=null, $default = null) { $load = Load::getInstance(); return $load->config($name,$file,$default);}/** * 获取和设置语言定义(不区分大小写) * @param string $name 语言标识 * @param mixed $value 指定文件名 * @return mixed */function lang($name=null, $file = 'language') { static $_lang = array(); $default_lang = config('DEFAULT_LANG'); $path = LANG_PATH.config('DEFAULT_LANG').'/'; //引入语言包 if (is_array($name) && !empty($name)) $_lang = array_merge($_lang, array_change_key_case($name, CASE_LOWER)); //引入模块级、插件级语言包 if(is_string($name)) { if(strpos($name,'/') !== false){ list($module, $indicate) = explode('/', $name); $path = APP_PATH.config('DEFAULT_H_LAYER').'/'.$module.'/language/'.$default_lang.'/'; }elseif (strpos($name,'#') !== false) { list($pluginid, $indicate) = explode('#', $name); $path = APP_PATH.'plugin/'.$pluginid.'/language/'.$default_lang.'/'; }else{ return $_lang[$name] ? $_lang[$name] : $name; } $fullname = $path.$file.EXT; if(!isset($_lang[md5($fullname)])) { $_lang[md5($fullname)] = array(); if(is_file($path.$file.'.php') && file_exists($path.$file.'.php')) $array = include $path.$file.'.php'; $_lang[md5($fullname)] = array_merge($_lang[md5($fullname)], array_change_key_case($array, CASE_LOWER)); } return $_lang[md5($fullname)][$indicate] ? $_lang[md5($fullname)][$indicate] : $name; } return null;}/* 模型实例化 */function model($name, $layer = 'table') { $load = Load::getInstance(); return $load->$layer($name);}/** * Cookie 设置、获取、删除 * @param string $name cookie名称 * @param mixed $value cookie值 * @param mixed $options cookie参数 * @return mixed */function cookie($name, $value='', $option=null) { // 默认设置 $config = array( 'prefix' => config('cookie_prefix'), // cookie 名称前缀 'expire' => config('cookie_expire'), // cookie 保存时间 'path' => config('cookie_path'), // cookie 保存路径 'domain' => config('cookie_domain'), // cookie 有效域名 ); // 参数设置(会覆盖黙认设置) if (!is_null($option)) { if (is_numeric($option)) $option = array('expire' => $option); elseif (is_string($option)) parse_str($option, $option); $config = array_merge($config, array_change_key_case($option)); } // 清除指定前缀的所有cookie if (is_null($name)) { if (empty($_COOKIE)) return; // 要删除的cookie前缀,不指定则删除config设置的指定前缀 $prefix = empty($value) ? $config['prefix'] : $value; if (!empty($prefix)) {// 如果前缀为空字符串将不作处理直接返回 foreach ($_COOKIE as $key => $val) { if (0 === stripos($key, $prefix)) { setcookie($key, '', time() - 3600, $config['path'], $config['domain']); unset($_COOKIE[$key]); } } } return; } $name = $config['prefix'] . $name; if ('' === $value) { if(isset($_COOKIE[$name])){ $value = $_COOKIE[$name]; if(0===strpos($value,'cookie:')){ $value = substr($value,6); return array_map('urldecode',json_decode(MAGIC_QUOTES_GPC?stripslashes($value):$value,true)); }else{ return $value; } }else{ return null; } } else { if (is_null($value)) { setcookie($name, '', time() - 3600, $config['path'], $config['domain']); unset($_COOKIE[$name]); // 删除指定cookie } else { // 设置cookie if(is_array($value)){ $value = 'cookie:'.json_encode(array_map('urlencode',$value)); } $expire = !empty($config['expire']) ? time() + intval($config['expire']) : 0; setcookie($name, $value, $expire, $config['path'], $config['domain']); $_COOKIE[$name] = $value; } }}/** * session管理函数 * @param string|array $name session名称 如果为数组则表示进行session设置 * @param mixed $value session值 * @return mixed */function session($name,$value='') { $prefix = config('SESSION_PREFIX'); if(is_array($name)) { // session初始化 在session_start 之前调用 if(isset($name['prefix'])) config('SESSION_PREFIX',$name['prefix']); if(config('VAR_SESSION_ID') && isset($_REQUEST[config('VAR_SESSION_ID')])){ session_id($_REQUEST[config('VAR_SESSION_ID')]); }elseif(isset($name['id'])) { session_id($name['id']); } ini_set('session.auto_start', 0); if(isset($name['name'])) session_name($name['name']); if(isset($name['path'])) session_save_path($name['path']); if(isset($name['domain'])) ini_set('session.cookie_domain', $name['domain']); if(isset($name['expire'])) ini_set('session.gc_maxlifetime', $name['expire']); if(isset($name['use_trans_sid'])) ini_set('session.use_trans_sid', $name['use_trans_sid']?1:0); if(isset($name['use_cookies'])) ini_set('session.use_cookies', $name['use_cookies']?1:0); if(isset($name['cache_limiter'])) session_cache_limiter($name['cache_limiter']); if(isset($name['cache_expire'])) session_cache_expire($name['cache_expire']); // 启动session if(config('SESSION_AUTO_START')) session_start(); }elseif('' === $value){ if(0===strpos($name,'[')) { // session 操作 if('[pause]'==$name){ // 暂停session session_write_close(); }elseif('[start]'==$name){ // 启动session session_start(); }elseif('[destroy]'==$name){ // 销毁session $_SESSION = array(); session_unset(); session_destroy(); }elseif('[regenerate]'==$name){ // 重新生成id session_regenerate_id(); } }elseif(0===strpos($name,'?')){ // 检查session $name = substr($name,1); if(strpos($name,'.')){ // 支持数组 list($name1,$name2) = explode('.',$name); return $prefix?isset($_SESSION[$prefix][$name1][$name2]):isset($_SESSION[$name1][$name2]); }else{ return $prefix?isset($_SESSION[$prefix][$name]):isset($_SESSION[$name]); } }elseif(is_null($name)){ // 清空session if($prefix) { unset($_SESSION[$prefix]); }else{ $_SESSION = array(); } }elseif($prefix){ // 获取session if(strpos($name,'.')){ list($name1,$name2) = explode('.',$name); return isset($_SESSION[$prefix][$name1][$name2])?$_SESSION[$prefix][$name1][$name2]:null; }else{ return isset($_SESSION[$prefix][$name])?$_SESSION[$prefix][$name]:null; } }else{ if(strpos($name,'.')){ list($name1,$name2) = explode('.',$name); return isset($_SESSION[$name1][$name2])?$_SESSION[$name1][$name2]:null; }else{ return isset($_SESSION[$name])?$_SESSION[$name]:null; } } }elseif(is_null($value)){ // 删除session if($prefix){ unset($_SESSION[$prefix][$name]); }else{ unset($_SESSION[$name]); } }else{ // 设置session if($prefix){ if (!is_array($_SESSION[$prefix])) { $_SESSION[$prefix] = array(); } $_SESSION[$prefix][$name] = $value; }else{ $_SESSION[$name] = $value; } }}/** * 缓存管理 * @param mixed $name 缓存名称,如果为数组表示进行缓存设置 * @param mixed $value 缓存值 * @param mixed $options 缓存参数 * @return mixed */function cache($name, $value='',$folder = 'common',$options=null) { $load = Load::getInstance(); return $load->cache($name, $value,$folder,$options);}/** * 发送HTTP状态 * @param integer $code 状态码 * @return void */function send_http_status($code) { static $_status = array( // Informational 1xx 100 => 'Continue', 101 => 'Switching Protocols', // Success 2xx 200 => 'OK', 201 => 'Created', 202 => 'Accepted', 203 => 'Non-Authoritative Information', 204 => 'No Content', 205 => 'Reset Content', 206 => 'Partial Content', // Redirection 3xx 300 => 'Multiple Choices', 301 => 'Moved Permanently', 302 => 'Moved Temporarily ', // 1.1 303 => 'See Other', 304 => 'Not Modified', 305 => 'Use Proxy', // 306 is deprecated but reserved 307 => 'Temporary Redirect', // Client Error 4xx 400 => 'Bad Request', 401 => 'Unauthorized', 402 => 'Payment Required', 403 => 'Forbidden', 404 => 'Not Found', 405 => 'Method Not Allowed', 406 => 'Not Acceptable', 407 => 'Proxy Authentication Required', 408 => 'Request Timeout', 409 => 'Conflict', 410 => 'Gone', 411 => 'Length Required', 412 => 'Precondition Failed', 413 => 'Request Entity Too Large', 414 => 'Request-URI Too Long', 415 => 'Unsupported Media Type', 416 => 'Requested Range Not Satisfiable', 417 => 'Expectation Failed', // Server Error 5xx 500 => 'Internal Server Error', 501 => 'Not Implemented', 502 => 'Bad Gateway', 503 => 'Service Unavailable', 504 => 'Gateway Timeout', 505 => 'HTTP Version Not Supported', 509 => 'Bandwidth Limit Exceeded' ); if(isset($_status[$code])) { header('HTTP/1.1 '.$code.' '.$_status[$code]); // 确保FastCGI模式下正常 header('Status:'.$code.' '.$_status[$code]); }}/** * 获取客户端IP地址 * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字 * @return mixed */function get_client_ip($type = 0) { $type = $type ? 1 : 0; static $ip = NULL; if ($ip !== NULL) return $ip[$type]; if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $pos = array_search('unknown',$arr); if(false !== $pos) unset($arr[$pos]); $ip = trim($arr[0]); }elseif (isset($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; }elseif (isset($_SERVER['REMOTE_ADDR'])) { $ip = $_SERVER['REMOTE_ADDR']; } // IP地址合法验证 $long = sprintf("%u",ip2long($ip)); $ip = $long ? array($ip, $long) : array('0.0.0.0', 0); return $ip[$type];}// 不区分大小写的in_array实现function in_array_case($value,$array){ return in_array(strtolower($value),array_map('strtolower',$array));}/** * 取得对象实例 支持调用类的静态方法 * @param string $name 类名 * @param string $method 方法名,如果为空则返回实例化对象 * @param array $args 调用参数 * @return object */function get_instance_of($name, $method='', $args=array()) { static $_instance = array(); $identify = empty($args) ? $name . $method : $name . $method . to_guid_string($args); if (!isset($_instance[$identify])) { if (class_exists($name)) { $o = new $name(); if (method_exists($o, $method)) { if (!empty($args)) { $_instance[$identify] = call_user_func_array(array(&$o, $method), $args); } else { $_instance[$identify] = $o->$method(); } } else $_instance[$identify] = $o; } else halt(lang('_class_not_exist_') . ':' . $name); } return $_instance[$identify];}/** * 根据PHP各种类型变量生成唯一标识号 * @param mixed $mix 变量 * @return string */function to_guid_string($mix) { if (is_object($mix) && function_exists('spl_object_hash')) { return spl_object_hash($mix); } elseif (is_resource($mix)) { $mix = get_resource_type($mix) . strval($mix); } else { $mix = serialize($mix); } return md5($mix);}/** * 页面地址跳转 * @param type $url 目标地址 * @param type $name 倒计时 * @return type */function redirect($url, $time = 0) { if (!headers_sent()) { if (0 === $time) { header('Location: ' . $url); } else { header("refresh:{$time};url={$url}"); } exit(); } else { $str = "<meta http-equiv='Refresh' content='{$time};URL={$url}'>"; exit($str); }}/** * 通用提示页 * @param string $msg 提示消息(支持语言包变量) * @param integer $status 状态(0:失败;1:成功) * @param string $extra 附加数据 * @param string $format 返回类型 * @return mixed */function showmessage($msg, $url = '', $status = 0, $extra = '', $format = '') { if(empty($format)) { $format = IS_AJAX ? 'json' : 'html'; } $message = lang($msg); switch ($format) { case 'html': if(!defined('IN_ADMIN')) { if(empty($url) || $url == '-1'){ include TPL_PATH.'wap/common/showmessage.html'; } else { redirect($url); } } else { include TPL_PATH.'showmessage.tpl'; } break; case 'json': $result = array( 'status' => $status, 'referer' => $url, 'message' => $message, 'result' => $extra ); echo json_encode($result); exit; break; default: # code... break; } exit;}function checksubmit($name) { if(IS_POST) { return TRUE; } else { return FALSE; }}/** * xss过滤函数 * * @param $string * @return string */function remove_xss($string) { $string = preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S', '', $string); $parm1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base'); $parm2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload'); $parm = array_merge($parm1, $parm2); for ($i = 0; $i < sizeof($parm); $i++) { $pattern = '/'; for ($j = 0; $j < strlen($parm[$i]); $j++) { if ($j > 0) { $pattern .= '('; $pattern .= '(&#[x|X]0([9][a][b]);?)?'; $pattern .= '|(�([9][10][13]);?)?'; $pattern .= ')?'; } $pattern .= $parm[$i][$j]; } $pattern .= '/i'; $string = preg_replace($pattern, '', $string); } return $string;}function template($tplfile, $module = '') { $template = new template(); return $template->template($tplfile, $module)->display();}/** * 模块是否存在 * @param string 模块名 * @return boolean */function module_exists($name) { if(empty($name)) return false; $modules = cache('module', '', 'common'); return isset($modules[$name]);}/** * 加载函数文件 * 支持如下两种方式: * helper('until'); * helper('admin/until'); * 加载顺序:当前模块->指定模块->全局助手 * @param string $helper 文件名 * @return boolean */function helper($helper) { $load = Load::getInstance(); return $load->helper($helper);}/** * 字符串加解密 * @param string $string 原始字符串 * @param string $operation 加解密类型 * @param string $key 密钥 * @param integer $expiry 有效期 * @return string */function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { $ckey_length = 4; $key = md5($key != '' ? $key : config('authkey')); $keya = md5(substr($key, 0, 16)); $keyb = md5(substr($key, 16, 16)); $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : ''; $cryptkey = $keya.md5($keya.$keyc); $key_length = strlen($cryptkey); $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string; $string_length = strlen($string); $result = ''; $box = range(0, 255); $rndkey = array(); for($i = 0; $i <= 255; $i++) { $rndkey[$i] = ord($cryptkey[$i % $key_length]); } 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 < $string_length; $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($operation == 'DECODE') { if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) { return substr($result, 26); } else { return ''; } } else { return $keyc.str_replace('=', '', base64_encode($result)); }}/** * 远程请求数据 * @return string */function dfsockopen($url, $limit = 0, $post = '', $cookie = '', $bysocket = FALSE, $ip = '', $timeout = 15, $block = TRUE, $encodetype = 'URLENCODE', $allowcurl = TRUE, $position = 0) { $return = ''; $matches = parse_url($url); $scheme = $matches['scheme']; $host = $matches['host']; $path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/'; $port = !empty($matches['port']) ? $matches['port'] : 80; if(function_exists('curl_init') && function_exists('curl_exec') && $allowcurl) { $ch = curl_init(); $ip && curl_setopt($ch, CURLOPT_HTTPHEADER, array("Host: ".$host)); curl_setopt($ch, CURLOPT_URL, $scheme.'://'.($ip ? $ip : $host).':'.$port.$path); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); if($post) { curl_setopt($ch, CURLOPT_POST, 1); if($encodetype == 'URLENCODE') { curl_setopt($ch, CURLOPT_POSTFIELDS, $post); } else { parse_str($post, $postarray); curl_setopt($ch, CURLOPT_POSTFIELDS, $postarray); } } if($cookie) { curl_setopt($ch, CURLOPT_COOKIE, $cookie); } curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); $data = curl_exec($ch); $status = curl_getinfo($ch); $errno = curl_errno($ch); curl_close($ch); if($errno || $status['http_code'] != 200) { return; } else { return !$limit ? $data : substr($data, 0, $limit); } } if($post) { $out = "POST $path HTTP/1.0\r\n"; $header = "Accept: */*\r\n"; $header .= "Accept-Language: zh-cn\r\n"; $boundary = $encodetype == 'URLENCODE' ? '' : '; boundary='.trim(substr(trim($post), 2, strpos(trim($post), "\n") - 2)); $header .= $encodetype == 'URLENCODE' ? "Content-Type: application/x-www-form-urlencoded\r\n" : "Content-Type: multipart/form-data$boundary\r\n"; $header .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n"; $header .= "Host: $host:$port\r\n"; $header .= 'Content-Length: '.strlen($post)."\r\n"; $header .= "Connection: Close\r\n"; $header .= "Cache-Control: no-cache\r\n"; $header .= "Cookie: $cookie\r\n\r\n"; $out .= $header.$post; } else { $out = "GET $path HTTP/1.0\r\n"; $header = "Accept: */*\r\n"; $header .= "Accept-Language: zh-cn\r\n"; $header .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n"; $header .= "Host: $host:$port\r\n"; $header .= "Connection: Close\r\n"; $header .= "Cookie: $cookie\r\n\r\n"; $out .= $header; } $fpflag = 0; if(!$fp = @fsocketopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout)) { $context = array( 'http' => array( 'method' => $post ? 'POST' : 'GET', 'header' => $header, 'content' => $post, 'timeout' => $timeout, ), ); $context = stream_context_create($context); $fp = @fopen($scheme.'://'.($ip ? $ip : $host).':'.$port.$path, 'b', false, $context); $fpflag = 1; } if(!$fp) { return ''; } else { stream_set_blocking($fp, $block); stream_set_timeout($fp, $timeout); @fwrite($fp, $out); $status = stream_get_meta_data($fp); if(!$status['timed_out']) { while (!feof($fp) && !$fpflag) { if(($header = @fgets($fp)) && ($header == "\r\n" || $header == "\n")) { break; } } if($position) { for($i=0; $i<$position; $i++) { $char = fgetc($fp); if($char == "\n" && $oldchar != "\r") { $i++; } $oldchar = $char; } } if($limit) { $return = stream_get_contents($fp, $limit); } else { $return = stream_get_contents($fp); } } @fclose($fp); return $return; }}/** * URL生成 * @param string $name 路由地址([模块名]/[控制器名]/方法名) * @param mixed $param 附加参数 * @param mixed $domain 指定域名,TRUE 代表当前系统地址 * @return string */function url($name, $param = '', $domain = FALSE) { $vars = explode("/", $name); $params[config('VAR_METHOD')] = (is_array($vars) && !empty($vars)) ? array_pop($vars) : METHOD_NAME; $params[config('VAR_CONTROL')] = (is_array($vars) && !empty($vars)) ? array_pop($vars) : CONTROL_NAME; $params[config('VAR_MODULE')] = (is_array($vars) && !empty($vars)) ? array_pop($vars) : MODULE_NAME; krsort($params); if($domain !== FALSE) { if($domain === TRUE) $domain = $_SERVER['HTTP_HOST']; $url = (is_ssl() ? 'https://' : 'http://').$domain; } if ($param && is_string($param)) parse_str($param,$param); /* 检测伪静态 */ $name = implode('#', $params); $rewrites = @include CONF_PATH.'rewrite.php'; if ($rewrites[$name] && $rewrites[$name]['show'] == 1) { $showurl = $rewrites[$name]['showurl']; foreach ($param as $k => $v) { $showurl = str_replace('{'.$k.'}',$v,$showurl); } if ($domain !== FALSE) { return $url.$showurl; } else { return __ROOT__.$showurl; } } if ($param) $params = array_merge($params, $param); return $url.__APP__.'?'.http_build_query($params);}/** * 判断是否SSL协议 * @return boolean */function is_ssl() { if(isset($_SERVER['HTTPS']) && ('1' == $_SERVER['HTTPS'] || 'on' == strtolower($_SERVER['HTTPS']))){ return true; }elseif(isset($_SERVER['SERVER_PORT']) && ('443' == $_SERVER['SERVER_PORT'] )) { return true; } return false;}function adshow($name) { return $name;}/** * 后台页面调用 * @param int $totalrow 总记录数 * @param int $pagesize 每页记录数 * @param int $pagenum 页码数量 */function pages($totalrow, $pagesize = 10, $pagenum = 5) { $_GET['page'] = (int) $_GET['page']; $totalPage = ceil($totalrow/$pagesize); $rollPage = floor($pagenum/2); $StartPage = $_GET['page'] - $rollPage; $EndPage = $_GET['page'] + $rollPage; if($StartPage < 1) $StartPage = 1; if($EndPage < $pagenum) $EndPage = $pagenum; if($EndPage >= $totalPage) { $EndPage = $totalPage; $StartPage = max(1, $totalPage - $pagenum + 1); } $string = '<ul class="fr">'; if($_GET['page'] > 1){ $string .= '<li><a href="'.page_url(array('page' => $_GET['page'] - 1)).'">上一页</a></li>'; }else{ $string .= '<li class="prev disabled"><a>上一页</a></li>'; } for ($page = $StartPage; $page <= $EndPage; $page++) { $string .= $page == $_GET['page'] ? '<li class="current"><span>'.$page.'</span></li>' : '<li><a href="'.page_url(array('page' => $page)).'">'.$page.'</a></li>'; } if($_GET['page'] < $totalPage){ $string .= '<li><a href="'.page_url(array('page' => $_GET['page'] + 1)).'">下一页</a></li>'; }else{ $string .= '<li class="prev disabled"><a>下一页</a></li>'; } $string .= '<li class="last">共<b>'.$totalPage.'</b>页 到第<input name="page" class="input" type="text" value="'.$_GET['page'].'">页 <a class="button bg-gray-white" href="#">确定</a></li>'; $string .= '</ul>'; return $string;}/** * 随机字符串 * @param int $length 长度 * @param int $numeric 类型(0:混合;1:纯数字) * @return string */function random($length, $numeric = 0) { $seed = base_convert(md5(microtime().$_SERVER['DOCUMENT_ROOT']), 16, $numeric ? 10 : 35); $seed = $numeric ? (str_replace('0', '', $seed).'012340567890') : ($seed.'zZ'.strtoupper($seed)); if($numeric) { $hash = ''; } else { $hash = chr(rand(1, 26) + rand(0, 1) * 32 + 64); $length--; } $max = strlen($seed) - 1; for($i = 0; $i < $length; $i++) { $hash .= $seed{mt_rand(0, $max)}; } return $hash;}/** * 将list_to_tree的树还原成列表 * @param array $tree 原来的树 * @param string $child 孩子节点的键 * @param string $order 排序显示的键,一般是主键 升序排列 * @param array $list 过渡用的中间数组, * @return array 返回排过序的列表数组 * @author yangweijie <yangweijiester@gmail.com> */function tree_to_list($tree, $child = '_child', $order = 'id', &$list = array()) { if (is_array($tree)) { $refer = array(); foreach ($tree as $key => $value) { $reffer = $value; if (isset($reffer[$child])) { unset($reffer[$child]); tree_to_list($value[$child], $child, $order, $list); } $list[] = $reffer; } $list = list_sort_by($list, $order, $sortby = 'asc'); } return $list;}/** * 把返回的数据集转换成Tree * @param array $list 要转换的数据集 * @param string $pid parent标记字段 * @param string $level level标记字段 * @return array * @author */function list_to_tree($list, $pk = 'id', $pid = 'parent_id', $child = '_child', $root = 0) { $tree = array(); if (is_array($list)) { // 创建基于主键的数组引用 $refer = array(); foreach ($list as $key => $data) { $refer[$data[$pk]] = & $list[$key]; } foreach ($list as $key => $data) { // 判断是否存在parent $parentId = $data[$pid]; if ($root == $parentId) { $tree[$data[$pk]] = & $list[$key]; } else { if (isset($refer[$parentId])) { $parent = & $refer[$parentId]; $parent[$child][$data[$pk]] = & $list[$key]; } } } } return $tree;}/** * 对查询结果集进行排序 * @access public * @param array $list 查询结果 * @param string $field 排序的字段名 * @param array $sortby 排序类型 * asc正向排序 desc逆向排序 nat自然排序 * @return array */function list_sort_by($list, $field, $sortby = 'asc') { if (is_array($list)) { $refer = $resultSet = array(); foreach ($list as $i => $data) $refer[$i] = &$data[$field]; switch ($sortby) { case 'asc': // 正向排序 asort($refer); break; case 'desc':// 逆向排序 arsort($refer); break; case 'nat': // 自然排序 natcasesort($refer); break; } foreach ($refer as $key => $val) $resultSet[] = &$list[$key]; return $resultSet; } return false;}/** * 格式化金额 * @param type $money * @return type */function money($money, $str = ',') { return number_format($money, 2, '.', $str);}/** * 获取用户头像 * @param type $uid * @return string */function getavatar($uid, $default = true) { $uid = sprintf("%09d", $uid); $dir1 = substr($uid, 0, 3); $dir2 = substr($uid, 3, 2); $dir3 = substr($uid, 5, 2); $avatar = './uploadfile/avatar/'.$dir1.'/'.$dir2.'/'.$dir3.'/'.substr($uid, -2).'.jpg'; if(!is_file($avatar) && $default === true) { $avatar = './template/default/statics/images/member/default_head.png'; } return $avatar;}function return_bytes($val) { $val = trim($val); $last = strtolower($val{strlen($val)-1}); switch($last) { case 'g': $val *= 1024; case 'm': $val *= 1024; case 'k': $val *= 1024; } return $val;}function page_url($param = array(), $url) { $url = (empty($url)) ? $_SERVER['REQUEST_URI'] : $url; $urls = parse_url($url); $_url = $urls['path']; parse_str($urls['query'], $_param); $params = array_merge($_param, $param); return $_url.'?'.http_build_query($params);}function runhook($hookid, $params,$flag = FALSE) { if($flag == TRUE){ return Hook::execute($hookid, $params,$flag); }else{ Hook::execute($hookid, $params); }}/** * XML转数组 * @param string $arr * @param boolean $isnormal * @return array */function xml2array(&$xml, $isnormal = FALSE) { $xml_parser = new xml($isnormal); $data = $xml_parser->parse($xml); $xml_parser->destruct(); return $data;}/** * 数组转XML * @param array $arr * @param boolean $htmlon * @param boolean $isnormal * @param intval $level * @return type */function array2xml($arr, $htmlon = TRUE, $isnormal = FALSE, $level = 1) { $s = $level == 1 ? "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n<root>\r\n" : ''; $space = str_repeat("\t", $level); foreach($arr as $k => $v) { if(!is_array($v)) { $s .= $space."<item id=\"$k\">".($htmlon ? '<![CDATA[' : '').$v.($htmlon ? ']]>' : '')."</item>\r\n"; } else { $s .= $space."<item id=\"$k\">\r\n".array2xml($v, $htmlon, $isnormal, $level + 1).$space."</item>\r\n"; } } $s = preg_replace("/([\x01-\x08\x0b-\x0c\x0e-\x1f])+/", ' ', $s); return $level == 1 ? $s."</root>" : $s;}/** * 电子邮箱格式判断 * @param string $email 字符串 * @return boolean */function is_email($email) { if (!empty($email)) { return preg_match('/^[a-z0-9]+([\+_\-\.]?[a-z0-9]+)*@([a-z0-9]+[\-]?[a-z0-9]+\.)+[a-z]{2,6}$/i', $email); } return FALSE;}/** * 手机号码格式判断 * @param string $string * @return boolean */function is_mobile($string){ if (!empty($string)) { return preg_match('/^1[3|4|5|7|8][0-9]\d{8}$/', $string); } return FALSE;}/** * 邮政编码格式判断 * @param string $string * @return boolean */function is_zipcode($string){ if (!empty($string)) { return preg_match('/^[0-9][0-9]{5}$/', $string); } return FALSE;}/** * 缩略图生成 * @param sting $src * @param intval $width * @param intval $height * @param boolean $replace * @return string */function thumb($src = '', $width = 500, $height = 500, $replace = false) { if(is_file($src) && file_exists($src)) { $ext = pathinfo($src, PATHINFO_EXTENSION); $name = basename($src, '.'.$ext); $dir = dirname($src); if(in_array($ext, array('gif','jpg','jpeg','bmp','png'))) { $name = $name.'_thumb_'.$width.'_'.$height.'.'.$ext; $file = $dir.'/'.$name; if(!file_exists($file) || $replace == TRUE) { $image = new image($src); $image->thumb($width, $height, 1); $image->save($file); } return $file; } } return $src;}/** * 多维数组合并(支持多数组) * @return array */function array_merge_multi () { $args = func_get_args(); $array = array(); foreach ( $args as $arg ) { if ( is_array($arg) ) { foreach ( $arg as $k => $v ) { if ( is_array($v) ) { $array[$k] = isset($array[$k]) ? $array[$k] : array(); $array[$k] = array_merge_multi($array[$k], $v); } else { $array[$k] = $v; } } } } return $array;}function sizecount($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 = intval($size) . ' Bytes'; } return $size;}function fileext($filename) { return addslashes(strtolower(substr(strrchr($filename, '.'), 1, 10)));}/** * @param $title * @param $keywords * @param $description * @param $other * @param bool $flag * @return array */function seo($title, $keywords='', $description='', $other='', $flag = false) { $setting = cache('setting', '', 'common'); $site_title = $setting['site_name']; $site_keywords = $setting['site_keywords']; $site_description = $setting['site_description']; $tpl_theme = config('TPL_THEME'); $SEO = array(); if($flag == false && $tpl_theme !== 'wap'){ $SEO['title'] = ($title ? $title.' - ' : '').$site_title; }else{ $SEO['title'] = $title; } if(0 === SITE_AUTHORIZE && $tpl_theme !== 'wap')$SEO['title'] .= ' - '.pack("H*","506f7765726564206279204e6f6e6754616f"); $SEO['keywords'] = ($keywords ? $keywords : '').$site_keywords; $SEO['description'] = ($description ? $description : '').$site_description; $SEO['other'] = $other ? $other : ''; return $SEO;}/** * [is_favorite 判断商品是否已经收藏] * @param [type] $mid [description] * @param [type] $id [description] * @return boolean [description] */function is_favorite($mid,$id){ return model('goods/goods_sku','service')->is_favorite($mid,$id);}/*截取字符串*/function cut_str($string, $sublen, $start = 0, $code = 'UTF-8'){ if($code == 'UTF-8'){ $pa = "/[\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]/"; preg_match_all($pa, $string, $t_string); if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen)); return join('', array_slice($t_string[0], $start, $sublen)); }else{ $start = $start*2; $sublen = $sublen*2; $strlen = strlen($string); $tmpstr = ''; for($i=0; $i< $strlen; $i++){ if($i>=$start && $i< ($start+$sublen)){ if(ord(substr($string, $i, 1))>129){ $tmpstr.= substr($string, $i, 2); } else{ $tmpstr.= substr($string, $i, 1); } } if(ord(substr($string, $i, 1))>129) $i++; } return $tmpstr; }}function pinyin($string = '') { if(CHARSET != 'gbk') { $string = iconv(CHARSET,'GBK',$string); } $l = strlen($string); $i = 0; $pyarr = array(); $py = array(); $filename = CACHE_PATH.'data/pinyin.table'; $fp = fopen($filename,'r'); while(!feof($fp)) { $p = explode("-",fgets($fp,32)); $pyarr[intval($p[1])] = trim($p[0]); } fclose($fp); ksort($pyarr); while($i<$l) { $tmp = ord($string[$i]); if($tmp>=128) { $asc = abs($tmp*256+ord($string[$i+1])-65536); $i = $i+1; } else $asc = $tmp; $py[] = asc_to_pinyin($asc,$pyarr); $i++; } return $py;}/** * Ascii转拼音 * @param $asc * @param $pyarr */function asc_to_pinyin($asc,&$pyarr) { if($asc < 128)return chr($asc); elseif(isset($pyarr[$asc]))return $pyarr[$asc]; else { foreach($pyarr as $id => $p) { if($id >= $asc)return $p; } }}/** * 生成订单号 */function build_order_no($suffix = 'o') { return $suffix.date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);}/** * 对多位数组进行排序 * @param $multi_array 数组 * @param $sort_key需要传入的键名 * @param $sort排序类型 */function multi_array_sort($multi_array, $sort_key, $sort = SORT_DESC) { if (is_array($multi_array)) { foreach ($multi_array as $row_array) { if (is_array($row_array)) { $key_array[] = $row_array[$sort_key]; } else { return FALSE; } } } else { return FALSE; } array_multisort($key_array, $sort, $multi_array); return $multi_array;}/* 验证是否微信中访问 */function is_weixin(){ if ( strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false ) { return true; } return false;}/** * 获得当前的域名 * * @return string */function get_domain(){ /* 协议 */ $protocol = (isset($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off')) ? 'https://' : 'http://'; /* 域名或IP地址 */ if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) { $host = $_SERVER['HTTP_X_FORWARDED_HOST']; } elseif (isset($_SERVER['HTTP_HOST'])) { $host = $_SERVER['HTTP_HOST']; } else { /* 端口 */ if (isset($_SERVER['SERVER_PORT'])) { $port = ':' . $_SERVER['SERVER_PORT']; if ((':80' == $port && 'http://' == $protocol) || (':443' == $port && 'https://' == $protocol)) { $port = ''; } } else { $port = ''; } if (isset($_SERVER['SERVER_NAME'])) { $host = $_SERVER['SERVER_NAME'] . $port; } elseif (isset($_SERVER['SERVER_ADDR'])) { $host = $_SERVER['SERVER_ADDR'] . $port; } } return $protocol . $host;}/** * 获得网站的URL地址 * * @return string */function site_url(){ return get_domain() . substr(PHP_SELF, 0, strrpos(PHP_SELF, '/'));}function send_sms($mobile){ $api_url = 'http://nonghuitao.jingchang.tv/jpet/api.php/user/getVerifyCode/?ticket=' . $mobile . '&admin=bug51hjj'; $result = file_get_contents($api_url); $result = json_decode($result, true); if ($result['code'] == '200') { return $result['tag']; } else { return false; }}/** * 获得店铺自定内容 * * @return string */function get_seller_field($seller_id,$field_name){ return model('seller/seller','service')->getFieldById($seller_id,$field_name);}/** * 格式化调试数据 * @param $arr * @author 胡旺旺 */function pre($arr){ echo '<pre>'; print_r($arr); echo '</pre>'; exit;}/** * 错误数据库操作日志输出 * @param [type] $newFile [新文件夹] * @param [type] $erroMsg [错误信息] * @param string $newDir [新路径,可选] * @return [type] [description] */function logMsg($newFile, $erroMsg, $newDir=''){ $mkdir = './log/'.date('Y-m-d',time()).$newDir.'/'; if (!file_exists($mkdir)) { mkdir($mkdir); } $newFile = $mkdir.$newFile.'.txt'; file_put_contents($newFile, $erroMsg.PHP_EOL, FILE_APPEND);}/** * 设置session 存储时间 * @param integer $expire [秒数] */function setSessionTime($expire=0){ if($expire==0){ $expire=ini_get('session.gc_maxlifetime'); }else{ ini_set('session.gc_maxlifetime',$expire); } if(empty($_COOKIE['PHPSESSID'])){ session_set_cookie_params($expire); session_start(); }else{ session_start(); setcookie('PHPSESSID',session_id(),time()+$expire); }}setSessionTime(604800);//session 缓存一周
阅读全文
0 0
- 工作中常用 的自定义函数
- 工作中常用 的自定义函数
- 工作中常用函数
- 工作中常用的js函数
- 工作中常用的数据库的中技巧或函数
- 工作中积攒的几个自定义SQL函数
- 常用的自定义函数
- Bash中关于日期时间操作的常用自定义函数
- PHP项目开发中最常用的自定义函数整理
- 工作中常用的工具
- 工作中常用的命令
- 工作中常用的插件
- 工作中常用的网站
- 最常用的自定义函数
- 最常用的自定义函数
- 常用的 JS 自定义函数
- 常用JS中自定义函数及方法
- PHP编程中常用自定义函数
- 如何获取 chosen chosen.jquery.js 选中的值
- SSH—Struts2拦截器的应用(防止未登录用户进行操作)
- 拆装机
- 工作中常用 的自定义函数
- 磁盘分区
- 工作中常用 的自定义函数
- 注册表
- Oracle查询相关的联系题
- dijkstra + 优先队列 最短路 [sdut 2143]
- UAC
- String、StringBuffer和StringBuilder之间的区别
- The dependency target "pycaffe" of target "pytest" does not exist
- C语言实现9-9乘法表
- Win10电脑运行vb6.0时拖动鼠标时虚线错位如何解决