我试图使用ip-api.com/php 但我的服务器响应非常慢,我发现这是因为file_get_contents
基本上,我有一个非常简单的脚本(我认为是从github获得的)
function get_ip() {
//Just get the headers if we can or else use the SERVER global
if ( function_exists( 'apache_request_headers' ) ) {
$headers = apache_request_headers();
} else {
$headers = $_SERVER;
}
//Get the forwarded IP if it exists
if ( array_key_exists( 'X-Forwarded-For', $headers ) && filter_var( $headers['X-Forwarded-For'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 ) ) {
$the_ip = $headers['X-Forwarded-For'];
} elseif ( array_key_exists( 'HTTP_X_FORWARDED_FOR', $headers ) && filter_var( $headers['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 )
) {
$the_ip = $headers['HTTP_X_FORWARDED_FOR'];
} else {
$the_ip = filter_var( $_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 );
}
return $the_ip;
}
$ip=get_ip();
$query = @unserialize(file_get_contents('http://ip-api.com/php/'.$ip));
说到
$query = @unserialize(file_get_contents('http://ip-api.com/php/'.$ip));
冻结约1分钟。
答案 0 :(得分:3)
如果您阅读了他们的API,您会看到:
不推荐使用JSON。几乎所有PHP站点现在都支持json_decode(), 它比unserialize()
更快
引用为here
在那里你也会找到如何用Json做一个你可以利用的例子来说明你的观点:
要以JSON格式接收响应,请向
发送GET请求您可以提供要查找的IP地址或域,或者无需使用您的IP地址或域 当前的IP地址。
引用为here
答案 1 :(得分:0)
根据我的经验,http://ip-api.com/json没有响应服务器,这需要花费很多时间。当我从本地主机打电话时,它工作正常。
现在我正在使用https://freegeoip.app/json/,默认情况下每小时允许最多15,000个查询。