• 技术文章 >后端开发 >php教程

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

    2016-05-28 11:48:56原创385
    本文实例总结了PHP几个实用自定义函数。分享给大家供大家参考,具体如下:

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

    1、取客户端IP

    function getOnlineIp() {
      $strOnlineIp = "";
      if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) {
        $onlineip = getenv('HTTP_CLIENT_IP');
      } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) {
        $onlineip = getenv('HTTP_X_FORWARDED_FOR');
      } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) {
        $onlineip = getenv('REMOTE_ADDR');
      } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) {
        $onlineip = $_SERVER['REMOTE_ADDR'];
      }
      preg_match("/[\d\.]{7,15}/", $onlineip, $onlineipmatches);
      $strOnlineIp = $onlineipmatches[0] ? $onlineipmatches[0] : 'unknown';
      return $strOnlineIp;
    }
    
    

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

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

    function getStrTruncate($string, $length = 80, $etc = ''){
      if ($length == 0) return '';
      mb_internal_encoding("UTF-8");
      $string = str_replace("\n","",$string);
      $strlen = mb_strwidth($string);
      if ($strlen > $length) {
        $etclen = mb_strwidth($etc);
        $length = $length - $etclen;
        $str=''; $n = 0;
        for($i=0; $i<$length; $i++) {
          $c = mb_substr($string, $i, 1);
          $n += mb_strwidth($c);
          if ($n>$length) { break; }
          $str .= $c;
        }
        return $str.$etc;
      } else {
        return $string;
      }
    }
    echo getStrTruncate("海底苍鹰博客",7); //结果是海底苍,utf8一个汉字对应二个字符
    
    

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

    function timeFromNow($dateline) {
      if(emptyempty($dateline)) return false;
      $seconds = time() - $dateline;
      if ($seconds < 60){
        return "1分钟前";
      }elseif($seconds < 3600){
        return floor($seconds/60)."分钟前";
      }elseif($seconds < 24*3600){
        return floor($seconds/3600)."小时前";
      }elseif($seconds < 48*3600){
        return date("昨天 H:i", $dateline)."";
      }else{
        return date('Y-m-d', $dateline);
      }
    }
    echo timeFromNow(strtotime("2012-07-07 14:15:13")); //昨天 14:15
    echo timeFromNow(strtotime("2012-07-08 14:15:13")); //1小前
    
    

    4、过滤部分标签

    function delTags($str)
    {
      $farr = array(
      "/<(\/?)(script|i?frame|style|html|body|title|link|meta|form|input|embed|object|textarea|\?|\%)([^>]*?)>/isU",
      "/(<[^>]*)on[a-zA-Z]+\s*=([^>]*>)/isU"
      );
      $tarr = array(
      "",
      ""
      );
      $str = preg_replace( $farr,$tarr,$str);
      return $str;
    }
    $str = "asdfasdfsd====";
    echo delTags($str);  //结果:asdfasdfsd====alert(1111)
    echo strip_tags($str); //结果:sdfasdfsd====alert(1111)
    
    

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

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP基本语法入门教程》、《php面向对象程序设计入门教程》及《php常用函数与技巧总结》

    希望本文所述对大家PHP程序设计有所帮助。

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:PHP 自定义函数
    上一篇:简单谈谈php延迟静态绑定_PHP 下一篇:php实现word转html的方法_PHP
    线上培训班

    相关文章推荐

    • 你知道这个PHP命令行选项解析库(pflag)吗?• 带你看懂PHP中的class定义类与成员属性方法• PHP中如何才能将时间日期格式化?怎么计算时间差?• 最详细的教你PHP时间戳与日期时间的转换• PHP中应该怎样去完成时区的设置?

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网