ipinfo / ipinfo
这是IPinfo官方的PHP库,是任何地方最可靠、最准确、最深入的IP地址数据来源。我们处理了数以TB计的数据,以产生我们定制的IP地理定位、公司、运营商和IP类型数据集。请访问我们的开发者文档:https://ipinfo.io/developers。
Requires
- php: >=8.0
- ext-json: *
- guzzlehttp/guzzle: ^6.3||^7.0
- symfony/cache: ^6.3
- symfony/http-foundation: ^6.2 || ^7.0
Requires (Dev)
- phpunit/phpunit: ^10.0.0
- squizlabs/php_codesniffer: ^3.5.8
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->latitude
和 Details->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万家企业和开发者提供服务。