//根据ip获取地址信息
composer require "mylukin/ip2city: dev-master"

// vendor/mylukin/ip2city/src/IP2City.php 修改为下面这些内容
<?php
/**
* Created by PhpStorm.
* User: lukin
* Date: 15/3/26
* Time: 15:56
*/ namespace MyLukin\IP2City; class IP2City
{ private static $ip = NULL;
private static $fp = NULL;
private static $offset = NULL;
private static $index = NULL;
private static $cached = array();
private static $datFile = '17monipdb.dat'; // IP17Mon instance
private static $instance; /**
* Returns IP2City instance.
*
* @static
* @param string $dat_file
* @return Mylukin\Ip2city\IP2City
*/
public static function &instance($dat_file)
{
if (!self::$instance) {
self::$instance = new static($dat_file);
}
return self::$instance;
} public function __construct($dat_file)
{
self::$datFile = trim(getcwd(),'public').'/vendor/mylukin/ip2city/'.$dat_file;
} public static function ip2addr($ip)
{
if (empty($ip) === TRUE) {
return 'N/A';
} $nip = gethostbyname($ip);
$ipdot = explode('.', $nip); if ($ipdot[0] < 0 || $ipdot[0] > 255 || count($ipdot) !== 4) {
return 'N/A';
} if (isset(self::$cached[$nip]) === TRUE) {
return self::$cached[$nip];
} if (self::$fp === NULL) {
self::init();
} $nip2 = pack('N', ip2long($nip)); $tmp_offset = (int)$ipdot[0] * 4;
$start = unpack('Vlen', self::$index[$tmp_offset] . self::$index[$tmp_offset + 1] . self::$index[$tmp_offset + 2] . self::$index[$tmp_offset + 3]); $index_offset = $index_length = NULL;
$max_comp_len = self::$offset['len'] - 1024 - 4;
for ($start = $start['len'] * 8 + 1024; $start < $max_comp_len; $start += 8) {
if (self::$index{$start} . self::$index{$start + 1} . self::$index{$start + 2} . self::$index{$start + 3} >= $nip2) {
$index_offset = unpack('Vlen', self::$index{$start + 4} . self::$index{$start + 5} . self::$index{$start + 6} . "\x0");
$index_length = unpack('Clen', self::$index{$start + 7}); break;
}
} if ($index_offset === NULL) {
return 'N/A';
} fseek(self::$fp, self::$offset['len'] + $index_offset['len'] - 1024); self::$cached[$nip] = explode("\t", fread(self::$fp, $index_length['len'])); return self::$cached[$nip];
} private static function init()
{
if (self::$fp === NULL) {
self::$ip = new self(self::$datFile); self::$fp = fopen(self::$datFile, 'rb');
if (self::$fp === FALSE) {
throw new Exception('Invalid 17monipdb.dat file!');
} self::$offset = unpack('Nlen', fread(self::$fp, 4));
if (self::$offset['len'] < 4) {
throw new Exception('Invalid 17monipdb.dat file!');
} self::$index = fread(self::$fp, self::$offset['len'] - 4);
}
} public function __destruct()
{
if (self::$fp !== NULL) {
fclose(self::$fp);
}
}
}

composer ip2city配置的更多相关文章

  1. windows下手动安装composer并配置环境变量

    windows下手动安装composer并配置环境变量   转载地址: https://my.oschina.net/7sites/blog/209997 之前发表过一篇如何为composer设置代理 ...

  2. Ubuntu下安装composer及配置

    1.下载最新composer wget -c https://getcomposer.org/composer.phar 2.可执行权限 chmod u+x composer.phar 3.放置到安装 ...

  3. PHPUnit使用教程——PHP环境变量+x-debug+composer+phpunit配置安装(超详细!)

    注意:Windows系统 一.提前入坑点:要求php5.6,7.0,7.1,不论使用集成版还是非集成版的小伙伴都要好好查看自己的php版本,个人的版本居然是5.5.X的,哭唧唧.不过别担心,爸爸教你升 ...

  4. liunx系统安装composer与配置

    1.下载composer curl -sS https://getcomposer.org/installer | php 2.我把它放在系统的PATH目录中,这样就能在全局访问它. mv compo ...

  5. composer.json 配置设置

    配置文件的值为 key:val 必须双引号包裹 一.配置文件 名字 name包名称由用户名名称和仓库名称组成包版本限制来请求Monolog软件包 1.0.*.这意味着1.0开发分支中的任何版本,或大于 ...

  6. composer环境配置

    一 下载composer.phar http://pan.baidu.com/s/1nuDQBzz cmd命令行切换到composer.phar文件目录下 运行: echo @php "%~ ...

  7. composer 无法配置命令行写入配置文件问题

    composer config repo.packagist composer https://packagist.phpcomposer.com 这条命令无法修改composer.json 添加中国 ...

  8. composer 阿里云镜像配置

    https://developer.aliyun.com/composer 全局配置(推荐) 所有项目都会使用该镜像地址: composer config -g repo.packagist comp ...

  9. 基于Composer Player 模型加载和相关属性设置

    主要是基于达索软件Composer Player.的基础上做些二次开发. public class ComposerToolBarSetting { public bool AntiAliasingO ...

随机推荐

  1. Linux用户名、用户组的相关命令

    whoami  查看当前登录用户 id 用户名  查看用户名的id 及所属组 groups 查看当前登录用户的所有所属组 groups 用户名 查看指定用户的所有所属组 cat /etc/passwd ...

  2. Mac下的SecureCRT使用技巧

    1.secureCRT session manager 怎么添加到标题栏里? Options - Global Options - General 把 Use dockable session man ...

  3. 如何查看虚拟机的ip地址,以及如何给虚拟机配置静态ip

    1 在命令行上敲ifconfig 如下图: 通过inet addr : 192.168.25.129就是你的虚拟机当前的ip 2. 我们一般在局域网内是通过dhcp协议向网关发送ip请求,因此获取的i ...

  4. unity 向量赋值 传引用?传值?

    unity中,Vector2.Vector3之间的任意赋值都是传值 Vector2 v1; ,); v1=v2; v2.x=; Debug.Log(v1);//output: (2.0, 2.0) D ...

  5. Haskell语言学习笔记(82)Extensible effects

    安装 extensible-effects $ cabal install extensible-effects Installed extensible-effects-3.0.0.0 Extens ...

  6. arcgis python arcpy add data script添加数据脚本

    arcgis python arcpy add data script添加数据脚本mxd = arcpy.mapping.MapDocument("CURRENT")... df ...

  7. 吴裕雄 21-MySQL 正则表达式

    MySQL 正则表达式在前面的章节我们已经了解到MySQL可以通过 LIKE ...% 来进行模糊匹配.MySQL 同样也支持其他正则表达式的匹配, MySQL中使用 REGEXP 操作符来进行正则表 ...

  8. idea中maven中jdk版本的选择(转)

    转自:https://www.cnblogs.com/joshul/p/6222398.html IntelliJ IDEA中Maven项目的默认JDK版本   在IntelliJ IDEA 15中使 ...

  9. dropload插件的使用(上拉下滑加载数据)

    .导入 js dropload.min. js zepto.min.js  <!-- jQuery1.7以上 或者 Zepto 二选一,不要同时都引用 --> $(function(){ ...

  10. javascript sourcemap

    [javascript sourcemap] 暂时只有Chrome浏览器支持这个功能.在Developer Tools的Setting设置中,确认选中"Enable JavaScript s ...