首页 > 语言 > PHP > 正文

PHP几个实用自定义函数小结

2024-09-04 11:42:25
字体:
来源:转载
供稿:网友

这篇文章主要介绍了PHP几个实用自定义函数,结合实例总结分析了PHP网络操作、字符串操作、时间操作及正则表达式使用等技巧,需要的朋友可以参考下。

本文实例总结了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

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

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

  1. function getStrTruncate($string$length = 80, $etc = ''){ 
  2.   if ($length == 0) return ''
  3.   mb_internal_encoding("UTF-8"); 
  4.   $string = str_replace("/n","",$string); 
  5.   $strlen = mb_strwidth($string); 
  6.   if ($strlen > $length) { 
  7.     $etclen = mb_strwidth($etc); 
  8.     $length = $length - $etclen
  9.     $str=''$n = 0; 
  10.     for($i=0; $i<$length$i++) { 
  11.       $c = mb_substr($string$i, 1); 
  12.       $n += mb_strwidth($c); 
  13.       if ($n>$length) { break; } 
  14.       $str .= $c
  15.     } 
  16.     return $str.$etc
  17.   } else { 
  18.     return $string
  19.   } 

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. echo timeFromNow(strtotime("2012-07-07 14:15:13")); //昨天 14:15 
  16. echo timeFromNow(strtotime("2012-07-08 14:15:13")); //1小前 

4、过滤部分标签

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表