常用的common function库

View Code
  1 <?php
  2 //因为前后台都要用到,所以放在supermario文件夹下方便重用
  3  
  4 /**
  5  * 喔~可爱滴小数点~喔~可爱滴千位数~
  6  * 如果位数超过4位,则将第3位前增加,
  7  * @param int $gold
  8  * @return string
  9  */
 10 function showGold($gold) {
 11     return number_format($gold);
 12 }
 13  
 14 /**
 15  * 页面压缩输出
 16  */
 17 function ob_callback($buffer) {
 18     header('Etag: '.md5($buffer));
 19     if( extension_loaded('zlib') AND strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip") ) {
 20         $buffer = gzencode($buffer,9);
 21         header('Content-Encoding: gzip');
 22         header('Vary: Accept-Encoding');
 23         //header('Via: www.guangxitravel.cn');
 24         header('Content-Length: '.strlen($buffer));
 25     }
 26     return $buffer;
 27 }
 28  
 29 /**
 30  * 没有提示的情况下跳转页面
 31  * @param string $url
 32  * @param string $target
 33  */
 34 function go($url='', $target='parent') {
 35     if ($url != "") {
 36         echo('<script language="javascript">window.location="' . $url . '";</script>');
 37     } else {
 38         echo('<script language="javascript">window.location=self.location;"</script>');
 39     }
 40 }
 41  
 42 /**
 43  * 清除缓存,ECHO,然后DIE(可恶的javascript+php……纯文本输出,总会有一些空字符……)
 44  * @param string $msg
 45  */
 46 function justSay($msg) {
 47     ob_clean();
 48     die($msg);
 49 }
 50  
 51 /**
 52  * 将符合第二个参数的第一个参数里的内容替换为红色
 53  * @param string $data
 54  * @param array $keyword
 55  * @return string
 56  */
 57 function change_keyword($data, $keywords) {
 58     if (is_array($keywords)) {
 59         foreach ($keywords as $k => $v) {
 60             $data = str_replace($v, '<span class="red b">' . $v . '</span>', $data);
 61         }
 62         return $data;
 63     } else {
 64         return str_replace($keywords, '<span class="red b">' . $keywords . '</span>', $data);
 65     }
 66 }
 67  
 68 /**
 69  * 创建完全随机的颜色
 70  * @return string
 71  */
 72 function makeColor() {
 73     $key = '#';
 74     for ($i = 0; $i < 6; $i++)
 75         $key.= rand(0, 9);//生成php随机数
 76     return $key;
 77 }
 78  
 79 /**
 80  * 自动加载模型和第三方功能类
 81  * @param string $className
 82  */
 83 function autoLoad($className) {
 84     if (strstr($_SERVER['REQUEST_URI'], "/operator/") == false) {   //服务器不支持SCRIPT_URL
 85         if (file_exists(siteRoot . '/client/model/' . $className . '.php')) {
 86             require_once siteRoot . '/client/model/' . $className . '.php';
 87             return;
 88         }
 89     } else {
 90         if (file_exists(siteRoot . '/manager/model/' . $className . '.php')) {
 91             require_once siteRoot . '/manager/model/' . $className . '.php';
 92             return;
 93         }
 94     }
 95     if (file_exists(siteRoot . '/public/modules/' . $className . '.php')) {
 96         require_once siteRoot . '/public/modules/' . $className . '.php';
 97         return;
 98     }
 99     if (file_exists(siteRoot . '/client/order/model/' . $className . '.php')) {
100         require_once siteRoot . '/client/order/model/' . $className . '.php';
101         return;
102     }
103 }
104  
105 /**
106  * 用javascript弹出一条信息
107  * @param <string> $message
108  */
109 function message($message='') {
110     echo('<script language="javascript">alert("' . $message . '");</script>');
111 }
112  
113 /**
114  * 模拟strstr()的第三个参数,返回$h中,$n之前的数据
115  * //$h = haystack, $n = needle
116  * @param <string> $h
117  * @param <string> $n
118  * @return <string>
119  */
120 function strstrb($h, $n) {
121     return array_shift(explode($n, $h, 2));
122 }
123  
124 /**
125  * 显示错误信息,并跳转至$pageurl,含有样式
126  *
127  * @param string $messages
128  * @param string $pageurl
129  * @param int $msc 秒数
130  */
131 function msg($messages, $pageurl='javascript:history.back();', $msc=5) {
132     echo '<title>System Message</title>
133         <style type="text/css">
134         *{margin:0;padding:0px}
135         body{background:#fff;color:#333;font:12px Verdana, Tahoma, sans-serif;text-align:center;margin:0 auto;}
136         a{text-decoration:none;color:#29458C}
137         a:hover{text-decoration:underline;color:#f90}
138         #msg{border:1px solid #c5d7ef;text-align:left;margin:10% auto; width:50%}
139         #msgtitle{padding:5px 10px;background:#f0f6fb;border-bottom:1px #c5d7ef solid}
140         #msgtitle h1{font-size:14px;font-weight:bold;padding-left:10px;border-left:3px solid #acb4be;color:#1f3a87}
141         #msgcontent {padding:20px 50px;}
142         #msgcontent li{display:block;padding:5px;list-style:none;}
143         #msgcontent p{text-align:center;margin-top:10px;padding:0}
144         </style>
145         </head>
146         <body>
147         <div id="msg">
148             <div id="msgtitle">
149                 <h1>Web System Message</h1>
150             </div>
151             <div id="msgcontent">
152                 ', $messages, '
153                 <p><a href="', $pageurl, '">>>>请点此处返回</a></p>
154             </div>
155         </div>
156         <meta http-equiv="refresh" content="' . $msc . ';URL=', $pageurl, '">';
157     exit();
158 }
159  
160 /**
161  * 检查后面的日期是否大于前面的日期
162  * @param type $datecome 前面的日期
163  * @param type $datego 后面的日期
164  * @return type
165  */
166 function sub_date($datecome, $datego) {
167     $d1 = strtotime($datecome);
168     $d2 = strtotime($datego);
169     $days = round(($d2 - $d1) / 3600 / 24);
170     $days = $days < 1 ? 0 : $days;
171     return $days;
172 }
173  
174 /**
175  * 将$string的$length后边的内容用$dot替换
176  * @param string $string
177  * @param int $length
178  * @param string $dot
179  * @return string
180  */
181 function cutstr($string, $length, $dot = '...') {
182     @extract($string);
183     if (strlen($string) <= $length) {
184         return $string;
185     }
186     $string = htmlspecialchars($string);
187     $string = str_replace(array('&', '"', '&lt;', '&gt;'), array('&', '"', '<', '>'), $string);
188     $strcut = '';
189     $n = $tn = $noc = 0;
190     while ($n < strlen($string)) {
191         $t = ord($string[$n]);
192         if ($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
193             $tn = 1;
194             $n++;
195             $noc++;
196         } elseif (194 <= $t && $t <= 223) {
197             $tn = 2;
198             $n += 2;
199             $noc += 2;
200         } elseif (224 <= $t && $t < 239) {
201             $tn = 3;
202             $n += 3;
203             $noc += 2;
204         } elseif (240 <= $t && $t <= 247) {
205             $tn = 4;
206             $n += 4;
207             $noc += 2;
208         } elseif (248 <= $t && $t <= 251) {
209             $tn = 5;
210             $n += 5;
211             $noc += 2;
212         } elseif ($t == 252 || $t == 253) {
213             $tn = 6;
214             $n += 6;
215             $noc += 2;
216         } else {
217             $n++;
218         }
219         if ($noc >= $length) {
220             break;
221         }
222     }
223     if ($noc > $length) {
224         $n -= $tn;
225     }
226     $strcut = substr($string, 0, $n);
227     $strcut = str_replace(array('&', '"', '<', '>'), array('&', '"', '&lt;', '&gt;'), $strcut);
228     return $strcut . $dot;
229 }
230  
231 /**
232 +----------------------------------------------------------
233  * 如果 magic_quotes_gpc 为开启状态,则使用此方法使用为特殊符号前增加转移符号
234 +----------------------------------------------------------
235  * @access public
236 +----------------------------------------------------------
237  * @param string $value 可以为数组
238 +----------------------------------------------------------
239  * @return string
240 +----------------------------------------------------------
241  */
242 function kaddslashes($value) {
243     return $value = is_array($value) ? array_map('kaddslashes', $value) : addslashes($value);
244 }
245  
246 /**
247 +----------------------------------------------------------
248  * 为特殊符号前去除转移符号
249 +----------------------------------------------------------
250  * @access public
251 +----------------------------------------------------------
252  * @param string $value 可以为数组
253 +----------------------------------------------------------
254  * @return string
255 +----------------------------------------------------------
256  */
257 function kstripcslashes($value) {
258     return $value = is_array($value) ? array_map('kstripcslashes', $value) : stripcslashes($value);
259 }
260  
261 /**
262  * 将字符串内容html实体化,避免一些非法信息直接执行。如果参数是数组,则递归。
263  * @param string $value
264  * @return array
265  */
266 function khtmlspecialchars($value) {
267     return is_array($value) ? array_map('khtmlspecialchars', $value) :
268             preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4})|[a-zA-Z][a-z0-9]{2,5});)/', '&\\1', str_replace(array('&', '"', '<', '>'), array('&', '"', '&lt;', '&gt;'), $value));
269 }
270  
271 /**
272  * 将字符串中的html去除,如果参数是数组,则递归。
273  * @param string $value
274  * @return array
275  */
276 function striptags($value) {
277     return $value = is_array($value) ? array_map('striptags', $value) : strip_tags($value);
278 }
279  
280 /**
281  * 检查email的合法性
282  *
283  * @param string $email
284  * @return bool
285  */
286 function check_email($email) {
287     if (preg_match("/([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?/i", $email)) {
288         return true;
289     } else {
290         return false;
291     }
292 }
293  
294 /**
295  * 安全电子邮件地址
296  *
297  * @param string $email
298  * @param string $title
299  * @param <type> $attributes
300  * @return <type>
301  */
302 function safe_mailto($email, $title = '', $attributes = '') {
303     if (is_array($email)) {
304         $tmp = $email;
305         unset($email);
306         extract($tmp);
307     }
308     $title = (string) $title;
309  
310     if ($title == "") {
311         $title = $email;
312     }
313  
314     for ($i = 0; $i < 16; $i++) {
315         $x[] = substr('<a href="mailto:', $i, 1);
316     }
317  
318     for ($i = 0; $i < strlen($email); $i++) {
319         $x[] = "|" . ord(substr($email, $i, 1));
320     }
321  
322     $x[] = '"';
323  
324     if ($attributes != '') {
325         if (is_array($attributes)) {
326             foreach ($attributes as $key => $val) {
327                 $x[] = ' ' . $key . '="';
328                 for ($i = 0; $i < strlen($val); $i++) {
329                     $x[] = "|" . ord(substr($val, $i, 1));
330                 }
331                 $x[] = '"';
332             }
333         } else {
334             for ($i = 0; $i < strlen($attributes); $i++) {
335                 $x[] = substr($attributes, $i, 1);
336             }
337         }
338     }
339  
340     $x[] = '>';
341  
342     $temp = array();
343     for ($i = 0; $i < strlen($title); $i++) {
344         $ordinal = ord($title[$i]);
345  
346         if ($ordinal < 128) {
347             $x[] = "|" . $ordinal;
348         } else {
349             if (count($temp) == 0) {
350                 $count = ($ordinal < 224) ? 2 : 3;
351             }
352  
353             $temp[] = $ordinal;
354             if (count($temp) == $count) {
355                 $number = ($count == 3) ? (($temp['0'] % 16) * 4096) + (($temp['1'] % 64) * 64) + ($temp['2'] % 64) : (($temp['0'] % 32) * 64) + ($temp['1'] % 64);
356                 $x[] = "|" . $number;
357                 $count = 1;
358                 $temp = array();
359             }
360         }
361     }
362  
363     $x[] = '<';
364     $x[] = '/';
365     $x[] = 'a';
366     $x[] = '>';
367  
368     $x = array_reverse($x);
369     ob_start();
370     ?><script type="text/javascript">
371     //<![CDATA[
372     var l=new Array();
373         <?php
374             $i = 0;
375         foreach ($x as $val) {
376             ?>l[<?php echo $i++; ?>]='<?php echo $val; ?>';<?php } ?>
377  
378     for (var i = l.length-1; i >= 0; i=i-1){
379         if (l[i].substring(0, 1) == '|') document.write("&#"+unescape(l[i].substring(1))+";");
380         else document.write(unescape(l[i]));}
381     //]]>
382 </script><?php
383     $buffer = ob_get_contents();
384     ob_end_clean();
385     if ($tmp == '' || $tmp == NULL) {
386         return $buffer;
387     } else {
388         echo $buffer;
389     }
390 }
391  
392 /**
393 +----------------------------------------------------------
394  * 转换文字中的超链接为可点击连接
395 +----------------------------------------------------------
396  * @access public
397 +----------------------------------------------------------
398  * @param string $text 要处理的字符串
399 +----------------------------------------------------------
400  * @return string
401 +----------------------------------------------------------
402  */
403 function makeLink($string) {
404     $validChars = "a-z0-9\/\-_+=.~!%@?#&;:$\|";
405     $patterns = array(
406         "/(^|[^]_a-z0-9-=\"'\/])([a-z]+?):\/\/([{$validChars}]+)/ei",
407         "/(^|[^]_a-z0-9-=\"'\/])www\.([a-z0-9\-]+)\.([{$validChars}]+)/ei",
408         "/(^|[^]_a-z0-9-=\"'\/])ftp\.([a-z0-9\-]+)\.([{$validChars}]+)/ei",
409         "/(^|[^]_a-z0-9-=\"'\/:\.])([a-z0-9\-_\.]+?)@([{$validChars}]+)/ei");
410     $replacements = array(
411         "'\\1<a href=\"\\2://\\3\" title=\"\\2://\\3\" rel=\"external\">\\2://'.Input::truncate( '\\3' ).'</a>'",
412         "'\\1<a href=\"http://www.\\2.\\3\" title=\"www.\\2.\\3\" rel=\"external\">'.Input::truncate( 'www.\\2.\\3' ).'</a>'",
413         "'\\1<a href=\"ftp://ftp.\\2.\\3\" title=\"ftp.\\2.\\3\" rel=\"external\">'.Input::truncate( 'ftp.\\2.\\3' ).'</a>'",
414         "'\\1<a href=\"mailto:\\2@\\3\" title=\"\\2@\\3\">'.Input::truncate( '\\2@\\3' ).'</a>'");
415     return preg_replace($patterns, $replacements, $string);
416 }
417  
418 /**
419  * 获取客户端浏览器
420  * @return string
421  */
422 function browse_info() {
423     $browser = "";
424     $browserver = "";
425     $Browsers = array("Lynx", "MOSAIC", "AOL", "Opera", "JAVA", "MacWeb", "WebExplorer", "OmniWeb");
426     $Agent = $_SERVER["HTTP_USER_AGENT"];  //浏览器的全局变量
427     for ($i = 0; $i <= 7; $i++) {
428         if (strpos($Agent, $Browsers[$i])) {
429             $browser = $Browsers[$i];
430             $browserver = "";
431         }
432     }
433     if (ereg("Mozilla", $Agent) && ereg("MSIE", $Agent)) {
434         $temp = explode("(", $Agent);
435         $Part = $temp[1];
436         $temp = explode(";", $Part);
437         $Part = $temp[1];
438         $temp = explode(" ", $Part);
439         $browserver = $temp[2];
440         //$browserver =preg_replace("/([d.]+)/","1",$browserver);
441         $browserver = "IE" . $browserver;
442         $browser = "IE";
443     }
444     if (ereg("Mozilla", $Agent) && !ereg("MSIE", $Agent)) {
445         $temp = explode("(", $Agent);
446         $Part = $temp[0];
447         $temp = explode("/", $Part);
448         $browserver = $temp[1];
449         $temp = explode(" ", $browserver);
450         $browserver = $temp[0];
451         $browserver = preg_replace("/([d.]+)/", "1", $browserver);
452         $browserver = " $browserver";
453         $browser = "Netscape Navigator";
454     }
455  
456     if (ereg("Mozilla", $Agent) && ereg("Opera", $Agent)) {
457         $temp = explode("(", $Agent);
458         $Part = $temp[1];
459         $temp = explode(")", $Part);
460         $browserver = $temp[1];
461         $temp = explode(" ", $browserver);
462         $browserver = $temp[2];
463         $browserver = preg_replace("/([\d\.]+)/", "1", $browserver);
464         $browserver = " $browserver";
465         $browser = "Opera";
466     }
467     //火狐浏览器
468     if (ereg("Mozilla", $Agent) && ereg("Firefox", $Agent)) {
469         $temp = explode("(", $Agent);
470         $Part = $temp[1];
471         $temp = explode(")", $Part);
472         $browserver = $temp[1];
473         $temp = explode(" ", $browserver);
474         $browserver = $temp[2];
475         $browser = "火狐";
476     }
477     //谷歌浏览器
478     if (ereg("Mozilla", $Agent) && ereg("Chrome", $Agent)) {
479         $temp = explode("(", $Agent);
480         $temp = explode(" ", $temp[2]);
481         $browserver = $temp['3']; //如果以后google升级不变位置的话就是它了
482         $browser = "谷歌";
483     }
484     //360safe浏览器
485     if (ereg("Mozilla", $Agent) && ereg("360SE", $Agent)) {
486         //因为360浏览器,没有版本……
487         $browserver = $browser = "360安全卫士";
488     }
489     if ($browser != "") {
490         //$browseinfo = $browser.$browserver;
491         $browseinfo = $browserver;
492     } else {
493         $browseinfo = "Unknown";
494     }
495     return $browseinfo;
496 }
497  
498 /**
499  * 返回时间格式
500  * @name:  prepareDate
501  * @desc:  prepares a date in the proper format for specific database types
502  *         given a UNIX timestamp
503  * @param: $timestamp: a UNIX timestamp
504  * @param: $fieldType: the type of field to format the date for
505  *         (in MySQL, you have DATE, TIME, YEAR, and DATETIME)
506  */
507 function prepareDate($timestamp, $fieldType = 'DATETIME') {
508     $date = '';
509     if (!$timestamp === false && $timestamp > 0) {
510         switch ($fieldType) {
511             case 'DATE' :
512                 $date = date('Y-m-d', $timestamp);
513                 break;
514             case 'TIME' :
515                 $date = date('H:i:s', $timestamp);
516                 break;
517             case 'YEAR' :
518                 $date = date('Y', $timestamp);
519                 break;
520             default :
521                 $date = date('Y-m-d H:i:s', $timestamp);
522                 break;
523         }
524     }
525     return $date;
526 }
527  
528  
529 /**
530  * 适应多维数组的递归,并将其中重复的值去掉后返回
531  * @param array $array
532  * @return array
533  */
534 function super_unique($array) {
535     $result = array_map("unserialize", array_unique(array_map("serialize", $array)));
536  
537     foreach ($result as $key => $value) {
538         if (is_array($value)) {
539             $result[$key] = super_unique($value);
540         }
541     }
542  
543     return $result;
544 }
545  
546 /**
547  * 如果数值不满足2位,自动补零
548  * @param int $num
549  * @return int
550  */
551 function fullzero($num){
552     if(strlen($num)!=2){
553         return '0'.$num;
554     }else{
555         return $num;
556     }
557 }
558  
559 //返回上一个url
560 function get_visit_url(){
561     return $_SERVER['HTTP_REFERER'];
562 }
563 ?>

 

posted @ 2013-01-11 17:05  joy696163  阅读(186)  评论(0编辑  收藏  举报