技术文摘

帝国CMS原函数egetip()获取不了IPV6,推荐改法,还支持php8.0

作者:雨祺   发表于:
浏览:173次    字数:1742  原创
级别: 站长   总稿: 69 篇,  月稿: 0
原函数egetip()获取不了IPV6,推荐改法,还支持php8.0。
原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 : ''
当然也可以把返回正则替换去掉就行的,但是外一传值不合法呢?你没有过滤,系统就会被注入,风险很大!所以还是要检测ipv4和ipv6合法性,可以放心用!
  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) 

【审核人:站长】

收藏   加好友   生成海报   分享
点赞(0)
打赏
Tags:

发布者资料

热门文章

技术文摘

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