• php 几个比较实用的函数


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

    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(" ","",$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就够用了。

  • 相关阅读:
    java中ant包中的org.apache.tools.zip实现压缩和解压缩
    velocity.properties配置说明
    序列化人人网框架下的DAO?也就是在Spring下序列化DAO的问题(spring+quartz集群下)
    vue-cli使用sockjs即时通信
    VUE温习:nextTick、$refs、嵌套路由、keep-alive缓存、is特性、路由属性用法、路由钩子函数
    win7下Google谷歌浏览器上传下载卡死无响应
    微信支付开发流程
    阿里云视频点播同层播放问题
    微信小程序 scroll-view 实现锚点跳转
    解决微信小程序ios端滚动卡顿的问题
  • 原文地址:https://www.cnblogs.com/moqiang02/p/4061450.html
Copyright © 2020-2023  润新知