composer ip2city配置
//根据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配置的更多相关文章
- windows下手动安装composer并配置环境变量
windows下手动安装composer并配置环境变量 转载地址: https://my.oschina.net/7sites/blog/209997 之前发表过一篇如何为composer设置代理 ...
- Ubuntu下安装composer及配置
1.下载最新composer wget -c https://getcomposer.org/composer.phar 2.可执行权限 chmod u+x composer.phar 3.放置到安装 ...
- PHPUnit使用教程——PHP环境变量+x-debug+composer+phpunit配置安装(超详细!)
注意:Windows系统 一.提前入坑点:要求php5.6,7.0,7.1,不论使用集成版还是非集成版的小伙伴都要好好查看自己的php版本,个人的版本居然是5.5.X的,哭唧唧.不过别担心,爸爸教你升 ...
- liunx系统安装composer与配置
1.下载composer curl -sS https://getcomposer.org/installer | php 2.我把它放在系统的PATH目录中,这样就能在全局访问它. mv compo ...
- composer.json 配置设置
配置文件的值为 key:val 必须双引号包裹 一.配置文件 名字 name包名称由用户名名称和仓库名称组成包版本限制来请求Monolog软件包 1.0.*.这意味着1.0开发分支中的任何版本,或大于 ...
- composer环境配置
一 下载composer.phar http://pan.baidu.com/s/1nuDQBzz cmd命令行切换到composer.phar文件目录下 运行: echo @php "%~ ...
- composer 无法配置命令行写入配置文件问题
composer config repo.packagist composer https://packagist.phpcomposer.com 这条命令无法修改composer.json 添加中国 ...
- composer 阿里云镜像配置
https://developer.aliyun.com/composer 全局配置(推荐) 所有项目都会使用该镜像地址: composer config -g repo.packagist comp ...
- 基于Composer Player 模型加载和相关属性设置
主要是基于达索软件Composer Player.的基础上做些二次开发. public class ComposerToolBarSetting { public bool AntiAliasingO ...
随机推荐
- epoll_wait 时 POLLERR 与 POLLIN 同时返回的现象解析(转)
今天code review时,同事B对我代码中的poll()的处理做法提出了异议.于是做了些研究,还发现了一些好玩的故事. 异议的代码 我的代码是参考manpage写的,类似下面的做法.同事B说没有处 ...
- mysql 查询上个月某一天
本文地址:http://www.cnblogs.com/jying/p/8877065.html 需求:获取上个月15号的日期 网上一搜一大堆粘贴复制的大坑:(如下是查询上个月最后一天,可是我要的不一 ...
- win8安装iis asp.net
http://www.sanrengo.net/thread-62-1-1.html本文主要解决的是在win8操作系统下IIS配置asp.net的运行环境,当然win7的配置方法也大致相似,只有少许部 ...
- js高级-递归调用
函数调用自身 求1-100的和 var sum = 0; for(var i = 1; i<=100; i++){ sum += i } console.log(sum) //自己写的递归 va ...
- vue分页 点击(非下拉)
1.主页面 <template> <div class="list"> <template v-if="count"> 55 ...
- Maximum Likelihood及Maximum Likelihood Estimation
1.What is Maximum Likelihood? 极大似然是一种找到最可能解释一组观测数据的函数的方法. Maximum Likelihood is a way to find the mo ...
- 修改 Tomcat Connector运行模式 优化Tomcat运行性能
omcat是一个小型的轻量级应用服务器,也是JavaEE开发人员最常用的服务器之一.不过,许多开发人员不知道的是,Tomcat Connector(Tomcat连接器)有bio.nio.apr三种运行 ...
- ReactCSSTransitionGroup
[ReactCSSTransitionGroup] ReactCSSTransitionGroup is a high-level API based on ReactTransitionGroup ...
- excel 数据量较大边查询边输入到excel表格中
public Resultmodel getexpenseMessagx(HttpServletResponse response, String date1, String date2) { lon ...
- unittest测试
标签(空格分隔): unittest unittest介绍: python里面也有单元测试框架-unittest,相当于是一个python版的junit. 一.unittest简介 1.先导入unit ...