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

这篇文章主要介绍了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;
  15. }

这里,如果使用多级代理的用户,真实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. }
  20. }

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. echo timeFromNow(strtotime("2012-07-07 14:15:13")); //昨天 14:15
  17. 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. $str = "<a href='#'>asdfasdfsd</a>====<script>alert(1111)</script>";
  15. echo delTags($str); //结果:<a href='#'>asdfasdfsd</a>====alert(1111)
  16. echo strip_tags($str); //结果:sdfasdfsd====alert(1111)

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