php 几个比较实用的函数

来源:互联网 发布:ubuntu 17.10 安装wine 编辑:程序博客网 时间:2024/06/05 22:41

http://blog.51yip.com/php/1427.html


最近在看代码,发现以下是几个比较实用的函数。

1,取客户端IP

查看复制打印?
  1. function getOnlineIp() {  
  2.     $strOnlineIp = "";  
  3.     if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {  
  4.         $onlineip = getenv('HTTP_CLIENT_IP');  
  5.     } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {  
  6.         $onlineip = getenv('HTTP_X_FORWARDED_FOR');  
  7.     } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {  
  8.         $onlineip = getenv('REMOTE_ADDR');  
  9.     } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {  
  10.         $onlineip = $_SERVER['REMOTE_ADDR'];  
  11.     }  
  12.     preg_match("/[\d\.]{7,15}/"$onlineip$onlineipmatches);  
  13.     $strOnlineIp = $onlineipmatches[0] ? $onlineipmatches[0] : 'unknown';  
  14.     return $strOnlineIp;  
  15. }  

这里,如果使用多级代理的用户,真实IP是取不到的。

2,字符串截取,支持中文

查看复制打印?
  1. function getStrTruncate($string$length = 80, $etc = ''){  
  2.     if ($length == 0) return '';  
  3.     mb_internal_encoding("UTF-8");  
  4.   
  5.     $string = str_replace("\n","",$string);  
  6.     $strlen = mb_strwidth($string);  
  7.     if ($strlen > $length) {  
  8.         $etclen = mb_strwidth($etc);  
  9.         $length = $length - $etclen;  
  10.         $str=''$n = 0;  
  11.         for($i=0; $i<$length$i++) {  
  12.             $c = mb_substr($string$i, 1);  
  13.             $n += mb_strwidth($c);  
  14.             if ($n>$length) { break; }  
  15.             $str .= $c;  
  16.         }  
  17.         return $str.$etc;  
  18.     } else {  
  19.         return $string;  
  20.     }  
  21. }  
  22.   
  23. echo getStrTruncate("海底苍鹰博客",7);  //结果是海底苍,utf8一个汉字对应二个字符  

3,多长时间前的时间函数,论坛,博客常用

查看复制打印?
  1. function timeFromNow($dateline) {  
  2.     if(emptyempty($dateline)) return false;  
  3.     $seconds = time() - $dateline;  
  4.     if ($seconds < 60){  
  5.         return "1分钟前";  
  6.     }elseif($seconds < 3600){  
  7.         return floor($seconds/60)."分钟前";  
  8.     }elseif($seconds  < 24*3600){  
  9.         return floor($seconds/3600)."小时前";  
  10.     }elseif($seconds < 48*3600){  
  11.         return date("昨天 H:i"$dateline)."";  
  12.     }else{  
  13.         return date('Y-m-d'$dateline);  
  14.     }  
  15. }  
  16.   
  17. echo timeFromNow(strtotime("2012-07-07 14:15:13")); //昨天 14:15  
  18. echo timeFromNow(strtotime("2012-07-08 14:15:13")); //1小前  

4,过滤部分标签

查看复制打印?
  1. function delTags($str)  
  2. {  
  3.     $farr = array(  
  4.     "/<(\/?)(script|i?frame|style|html|body|title|link|meta|form|input|embed|object|textarea|\?|\%)([^>]*?)>/isU",  
  5.     "/(<[^>]*)on[a-zA-Z]+\s*=([^>]*>)/isU"  
  6.     );  
  7.     $tarr = array(  
  8.     "",  
  9.     ""  
  10.     );  
  11.     $str = preg_replace( $farr,$tarr,$str);  
  12.     return $str;  
  13. }  
  14.   
  15. $str = "<a href='#'>asdfasdfsd</a>====<script>alert(1111)</script>";  
  16. echo delTags($str);    //结果:<a href='#'>asdfasdfsd</a>====alert(1111)  
  17. echo strip_tags($str); //结果:sdfasdfsd====alert(1111)  

如果要过滤所有标签strip_tags就够用了。


原创粉丝点击