小辉网络社区致力于优质软件,活动线报,游戏辅助,绿色工具等资源共享,好货不私藏!

EmlogPro显示评论者的IP地理位置非插件

小辉工作室 建站知识

Emlog 评论显示IP地理信息的两种方法,可以为你的博客评论区增加已评论者的IP地理位置显现,也不算什么有用的功能,看别的网站都有所以就加上了,还有就是《使用了cdn获取不到真实IP的解决办法》看这篇文章。
第一步:把下面代码添加到你模板的module.php文件内:
<?php
 //获取 IP 地理地址
$data = '254.254.254.254';
 class IpLocation {
      var $fp;
      var $firstip;
      var $lastip;
      var $totalip;
      function getlong() {
         $result = unpack('Vlong', fread($this->fp, 4));
         return $result['long'];
      }
     function getlong3() {
         $result = unpack('Vlong', fread($this->fp, 3).chr(0));
         return $result['long'];
      }
      function packip($ip) {
         return pack('N', intval(ip2long($ip)));
      }
      function getstring($data = "") {
         $char = fread($this->fp, 1);
         while (ord($char) > 0) {
             $data .= $char;
             $char = fread($this->fp, 1);
         }
         return $data;
      }
      function getarea() {
         $byte = fread($this->fp, 1);
         switch (ord($byte)) {
             case 0:
                $area = "";
                break;
             case 1:
             case 2:
                fseek($this->fp, $this->getlong3());
                $area = $this->getstring();
                break;
             default:
                $area = $this->getstring($byte);
                break;
         }
         return $area;
         }
      function getlocation($ip) {
         if (!$this->fp) return null;
         $location['ip'] = gethostbyname($ip);
         $ip = $this->packip($location['ip']);
         $l = 0;
         $u = $this->totalip;
         $findip = $this->lastip;
         while ($l <= $u) {
             $i = floor(($l + $u) / 2);
             fseek($this->fp, $this->firstip + $i * 7);
             $beginip = strrev(fread($this->fp, 4));
             if ($ip < $beginip) {
                $u = $i - 1;
             }
             else {
                fseek($this->fp, $this->getlong3());
                $endip = strrev(fread($this->fp, 4));
                if ($ip > $endip) {
                    $l = $i + 1;
                }
                else {
                    $findip = $this->firstip + $i * 7;
                    break;
                }
             }
         }
         fseek($this->fp, $findip);
         $location['beginip'] = long2ip($this->getlong());
         $offset = $this->getlong3();
         fseek($this->fp, $offset);
         $location['endip'] = long2ip($this->getlong());
         $byte = fread($this->fp, 1);
         switch (ord($byte)) {
             case 1:
                $countryOffset = $this->getlong3();
                fseek($this->fp, $countryOffset);
                $byte = fread($this->fp, 1);
                switch (ord($byte)) {
                    case 2:
                       fseek($this->fp, $this->getlong3());
                       $location['country'] = $this->getstring();
                       fseek($this->fp, $countryOffset + 4);
                       $location['area'] = $this->getarea();
                       break;
                    default:
                       $location['country'] = $this->getstring($byte);
                       $location['area'] = $this->getarea();
                       break;
                }
                break;
             case 2:
                fseek($this->fp, $this->getlong3());
                $location['country'] = $this->getstring();
                fseek($this->fp, $offset + 8);
                $location['area'] = $this->getarea();
                break;
             default:
                $location['country'] = $this->getstring($byte);
                $location['area'] = $this->getarea();
                break;
         }
         if ($location['country'] == " CZNET") {
             $location['country'] = "未知";
         }
         if ($location['area'] == " CZNET") {
             $location['area'] = "";
         }
         return $location;
      }
      function IpLocation($filename = "qqwry.dat") {
         $this->fp = 0;
         if (($this->fp = @fopen($filename, 'rb')) !== false) {
             $this->firstip = $this->getlong();
             $this->lastip = $this->getlong();
             $this->totalip = ($this->lastip - $this->firstip) / 7;
             register_shutdown_function(array(&$this, '_IpLocation'));
         }
      }
      function _IpLocation() {
         if ($this->fp) {
             fclose($this->fp);
         }
         $this->fp = 0;
      }
 }
 function getaddress($myip){
 $ipOrDomain=$myip;
 $iplocation = new IpLocation();
 $location = $iplocation->getlocation($ipOrDomain);
 $address=mb_convert_encoding($location['country'].$location['area'], "utf-8", "gbk");
 return $address;
 }
 ?>
然后在需要显示的地方插入以下代码:
<?php echo getaddress($comment['ip']);?>
另外一种是通过远程网站相关接口实现。
在module.php中添加以下代码:
<?php
//blog:获取 IP 地址所在地,提取新浪 IP 接口
function getaddress($ip)
{
//调用 sina 查询接口
$str = file_get_contents("http://counter.sina.com.cn/ip ip=".$ip);
//转换字符集
$str = mb_convert_encoding($str,"UTF-8","GBK");
//匹配结果
preg_match_all('/[\x{4e00}-\x{9fa5}]+/u',$str,$get);
//将数组转换成字符串
$add = implode('-',$get[0]);
//返回结果
return $add;
}
?>
然后在需要显示的地方插入以下代码:
<?php echo getaddress($comment['ip']);?>
图片显示方法:
<a title= <?php echo getaddress($comment['ip']);?>>&nbsp;<img src="./ip.png"></a>
其中ip.png这个图标会显示在评论人的后面,鼠标放上去会显示地理地址。

温馨提示:如有转载或引用以上内容请将本文链接作为出处标注!百度未收录

免责声明:本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。侵删请致信E-mail:431228450@qq.com

标签 暂无标签
资源分享
评论列表