ipinfo/ipinfo

这是IPinfo官方的PHP库,是任何地方最可靠、最准确、最深入的IP地址数据来源。我们处理了数以TB计的数据,以产生我们定制的IP地理定位、公司、运营商和IP类型数据集。请访问我们的开发者文档:https://ipinfo.io/developers。

v3.1.3 2024-09-04 03:28 UTC

This package is auto-updated.

Last update: 2024-09-04 03:31:14 UTC


README

这是IPinfo.io IP地址API的官方PHP客户端库,允许您查找自己的IP地址,或获取以下任一IP的详细信息:

  • IP到地理位置数据(城市、地区、国家、邮政编码、纬度和经度)
  • ASN信息(ISP或网络运营商、相关域名和类型,如商业、托管或公司)
  • 公司详情(使用该IP地址的商业名称和域名)
  • 运营商信息(移动运营商的名称以及如果该IP仅用于移动流量,则该运营商的MNC和MCC)

检查我们为您IP地址拥有的所有数据在这里

入门

您需要一个IPinfo API访问令牌,您可以通过在https://ipinfo.io/signup上注册免费账户来获取。

免费计划每月限制为50,000次请求,并且不包括一些数据字段,如IP类型和公司数据。要启用所有数据字段和额外的请求量,请参阅https://ipinfo.io/pricing

安装

此包与PHP 8兼容,并可通过Composer使用。

composer require ipinfo/ipinfo

快速开始

<?php

require_once __DIR__ . '/vendor/autoload.php';

use ipinfo\ipinfo\IPinfo;

$access_token = '123456789abc';
$client = new IPinfo($access_token);
$ip_address = '216.239.36.21';
$details = $client->getDetails($ip_address);

echo $details->city; // Mountain View
echo $details->loc; // 37.4056,-122.0775

使用

IPinfo->getDetails()方法接受一个IP地址作为可选的位置参数。如果没有指定IP地址,API将返回请求的IP地址的数据。

$client = new IPinfo();
$ip_address = '216.239.36.21';
$details = $client->getDetails($ip_address);
echo $details->city; // Mountain View
echo $details->loc; // 37.4056,-122.0775

身份验证

IPinfo库可以使用您的IPinfo API令牌进行身份验证,该令牌作为位置参数传递。它也可以在没有身份验证令牌的情况下工作,但功能更加有限。

$access_token = '123456789abc';
$client = new IPinfo($access_token);

详细信息数据

IPinfo->getDetails()将返回一个包含所有字段的对象,这些字段列于IPinfo开发者文档中,并略有增加。可以直接访问属性。

$details->hostname; // cpe-104-175-221-247.socal.res.rr.com

国家名称

Details->country_name将返回国家名称,如由countries对象提供。下面将说明如何更改该对象以用于非英语语言。Details->country将仍然返回国家代码。

$details->country; // US
$details->country_name; // United States

欧盟国家

Details->is_eu将返回true,如果国家是欧盟的成员,如由eu对象提供。

$details->is_eu; // False

国家标志

Details->country_flag将返回国家的emoji和Unicode表示形式,如由flags对象提供。

$details->country_flag['emoji']; // 🇺🇸
$details->country_flag['unicode']; // U+1F1FA U+1F1F8

国家标志URL

Details->country_flag_url 会返回一个指向国家国旗图像的公开链接,该图像以 SVG 格式,可以在任何地方使用。

$details->country_flag_url; // https://cdn.ipinfo.io/static/images/countries-flags/US.svg

国家货币

Details->country_currency 会返回国家的货币代码和符号,如 currency 对象所提供。

$details->country_currency['code']; // USD
$details->country_currency['symbol']; // $

大陆

Details->continent 会返回大陆的代码和名称,如 continents 对象所提供。

$details->continent['code']; // NA
$details->continent['name']; // North America

经纬度

Details->latitudeDetails->longitude 分别返回纬度和经度,均为字符串。 Details->loc 仍然会返回包含这两个值的复合字符串。

$details->loc; // 37.4056,-122.0775
$details->latitude; // 37.4056
$details->longitude; // -122.0775

访问所有属性

Details->all 会以字典的形式返回所有详细信息数据。

$details->all;
/*
(
    [ip] => 216.239.36.21
    [hostname] => any-in-2415.1e100.net
    [anycast] => 1
    [city] => Mountain View
    [region] => California
    [country] => US
    [loc] => 37.4056,-122.0775
    [org] => AS15169 Google LLC
    [postal] => 94043
    [timezone] => America/Los_Angeles
    [asn] => Array
        (
            [asn] => AS15169
            [name] => Google LLC
            [domain] => google.com
            [route] => 216.239.36.0/24
            [type] => hosting
        )

    [company] => Array
        (
            [name] => Google LLC
            [domain] => google.com
            [type] => hosting
        )

    [privacy] => Array
        (
            [vpn] => 
            [proxy] => 
            [tor] => 
            [relay] => 
            [hosting] => 1
            [service] => 
        )

    [abuse] => Array
        (
            [address] => US, CA, Mountain View, 1600 Amphitheatre Parkway, 94043
            [country] => US
            [email] => network-abuse@google.com
            [name] => Abuse
            [network] => 216.239.32.0/19
            [phone] => +1-650-253-0000
        )

    [domains] => Array
        (
            [ip] => 216.239.36.21
            [total] => 2535948
            [domains] => Array
                (
                    [0] => pub.dev
                    [1] => virustotal.com
                    [2] => blooket.com
                    [3] => go.dev
                    [4] => rytr.me
                )

        )

    [country_name] => United States
    [is_eu] => 
    [country_flag] => Array
        (
            [emoji] => 🇺🇸
            [unicode] => U+1F1FA U+1F1F8
        )

    [country_flag_url] => https://cdn.ipinfo.io/static/images/countries-flags/US.svg
    [country_currency] => Array
        (
            [code] => USD
            [symbol] => $
        )

    [continent] => Array
        (
            [code] => NA
            [name] => North America
        )

    [latitude] => 37.4056
    [longitude] => -122.0775
)

*/

缓存

默认情况下,通过 symfony/cache 库提供 Details 数据的内存缓存。已向默认的 TTL(生存时间)添加 LRU(最近最少使用)缓存失效功能。这意味着值将被缓存指定的时间;如果缓存的最大大小达到,则按需使缓存值失效,从最旧的缓存值开始。

修改缓存选项

可以通过在 $settings 参数数组中设置值来更改默认缓存 TTL 和最大大小。

  • 默认最大缓存大小:4096(建议使用2的倍数以提高效率)
  • 默认 TTL:24小时(以秒为单位)
$access_token = '123456789abc';
$settings = ['cache_maxsize' => 30, 'cache_ttl' => 128];
$client = new IPinfo($access_token, $settings);

使用不同的缓存

可以通过创建 CacheInterface 类的子类,并将此传递给处理对象,使用带有 cache 关键字参数的方式使用自定义缓存。提醒一下,这被称为 策略模式

$access_token = '123456789abc';
$settings = ['cache' => $my_fancy_custom_cache];
$client = new IPinfo($access_token, $settings);

禁用缓存

您可以通过在设置中传递一个 cache_disabled 键来禁用缓存。

$access_token = '123456789abc';
$settings = ['cache_disabled' => true];
$client = new IPinfo($access_token, $settings);

覆盖 HTTP 客户端选项

IPinfo 客户端构造函数接受一个 timeout 键,它是请求的超时时间(以秒为单位)。

为了提供更大的灵活性,接受一个 guzzle_opts 键,它接受一个关联数组,该数组在 Guzzle 请求选项 中进行了描述。此处设置的选项将覆盖 IPinfo 客户端内部在发生冲突时设置的任何自定义设置,包括标题。

批量操作

一次查找一个 IP 可能会很慢。它可以从客户端并发完成,但 IPinfo 支持一个批量端点,允许您将 IP 组合在一起,让我们为您批量获取它们的详细信息。

$access_token = '123456789abc';
$client = new IPinfo($access_token);
$ips = ['1.1.1.1', '8.8.8.8', '1.2.3.4/country'];
$results = $client->getBatchDetails($ips);
echo $results['1.2.3.4/country']; // AU
var_dump($results['1.1.1.1']);
var_dump($results['8.8.8.8']);

输入大小没有限制,因为接口会后台为您分块操作。

有关更多信息和服务限制,请参阅 官方文档

国际化

当查找 IP 地址时,响应对象包括一个 Details->country_name 属性,该属性包含基于美国英语的国家名称。通过在创建 IPinfo 对象时设置 IPinfo 对象内的 countries 对象,可以返回其他语言的国家名称。

php 对象必须具有以下结构

countries = [
    "BD" => "Bangladesh",
    "BE" => "Belgium",
    "BF" => "Burkina Faso",
    "BG" => "Bulgaria"
    ...
]
continents = [
        "BD" => ["code" => "AS", "name" => "Asia"],
        "BE" => ["code" => "EU", "name" => "Europe"],
        "BF" => ["code" => "AF", "name" => "Africa"],
        "BG" => ["code" => "EU", "name" => "Europe"],
        "BA" => ["code" => "EU", "name" => "Europe"],
        "BB" => ["code" => "NA", "name" => "North America"]
        ...
]

其他库

为许多语言提供了官方 IPinfo 客户端库,包括 PHP、Python、Go、Java、Ruby 以及许多流行的框架,如 Django、Rails 和 Laravel。还有许多第三方库和集成可用于我们的 API。

关于 IPinfo

成立于2013年,IPinfo自豪于成为全球最可靠、最准确、最深入的IP地址数据来源。我们处理数以千兆字节的数据,以生产我们定制的IP地理位置、公司、运营商、隐私、托管域名和IP类型数据集。我们的API每月处理超过400亿个请求,为10万家企业和开发者提供服务。

image