技术文摘

让帝国CMS原函数egetip()不仅能获取IPV6且支持php8.0的方法

作者:雨祺   发表于:
浏览:152次    字数:1739  原创
级别: 站长   总稿: 68 篇,  月稿: 0
让帝国CMS原函数egetip()不仅能获取IPV6且支持php8.0的方法。

1、原ip字段长度由20改39就行了

注意:很多会说直接去除正则,这个方法是可以正常获取,但时同也留下系统被就会注入风险。
  1. /** 
  2. * 取得IP4或IPV6(php 7.4以上写法) 
  3. * 
  4. * 不合法回返空 
  5. * @return string 
  6. */ 
  7. function egetip(): string 
  8.         global $ecms_config; 
  9.         
  10.         if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { 
  11.  
  12.                 $ip = getenv('HTTP_CLIENT_IP'); 
  13.         } 
  14.         elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')){ 
  15.  
  16.                 $ip = getenv('HTTP_X_FORWARDED_FOR'); 
  17.         } 
  18.         elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')){ 
  19.  
  20.                 $ip = getenv('REMOTE_ADDR'); 
  21.         } 
  22.         elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')){ 
  23.  
  24.                 $ip = $_SERVER['REMOTE_ADDR']; 
  25.         } 
  26.         if($ecms_config['sets']['getiptype'] > 0){ 
  27.              
  28.                 $ip = egetipadd(); 
  29.         } 
  30.         
  31.         return (substr_count($ip, ':') > 1 && false !== filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) || false !== filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) ? $ip : ''

  1. /** 
  2. * 取得IP4或IPV6(php 5.6以上写法) 
  3. * 
  4. * 不合法回返空 
  5. * @return string 
  6. */ 
  7. function egetip() 
  8.         global $ecms_config; 
  9.         
  10.         if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { 
  11.  
  12.                 $ip = getenv('HTTP_CLIENT_IP'); 
  13.         } 
  14.         elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')){ 
  15.  
  16.                 $ip = getenv('HTTP_X_FORWARDED_FOR'); 
  17.         } 
  18.         elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')){ 
  19.  
  20.                 $ip = getenv('REMOTE_ADDR'); 
  21.         } 
  22.         elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')){ 
  23.  
  24.                 $ip = $_SERVER['REMOTE_ADDR']; 
  25.         } 
  26.         if($ecms_config['sets']['getiptype'] > 0){ 
  27.              
  28.                 $ip = egetipadd(); 
  29.         } 
  30.         
  31.         return (substr_count($ip, ':') > 1 && false !== filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) || false !== filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) ? $ip : ''
  1. (substr_count($ip, ':') > 1 && false !== filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) || false !== filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) 这检测ipv4和ipv6合法性,可以放心用 

【审核人:站长】

收藏   加好友   生成海报   分享
点赞(0)
打赏
Tags: 方法 支持 获取 不仅 函数 原函数 帝国
评论(0人参与,0条评论) 雨祺
0/0
  • 请先说点什么
    最新评论

    发布者资料

    热门文章

    技术文摘

    查看更多技术文摘
    首页
    栏目
    搜索
    会员
    投稿