让我以一个例子来解释: -
假设http://www.washingtontimes.com/news/2012/sep/18/pentagon-stops-training-partnering-afghan-troops-b/是用户提交的网址,现在我需要的是php或javascript中的方法或任何其他网络脚本语言,它可以为我提供与上面的网址相对应的位置,比如这个网站在哪个国家托管, 在这种情况下,结果应该是“美国”。这是由http://www.site24x7.com等许多网站完成的,但我需要一个代码才能做到这一点
答案 0 :(得分:1)
你可以这样做,从url获取主机名然后使用gethostbyname()获取IP,然后从whois站点获取有关IP的一些信息。
<?php
$url = 'http://www.washingtontimes.com/news/2012/sep/18/pentagon-stops-training-partnering-afghan-troops-b/';
$host = parse_url($url,PHP_URL_HOST);
$ip = gethostbyname($host);
$info = get_ip_info($ip);
$result = array('host'=>$host, 'ip'=>$ip, 'info'=>$info);
print_r($result);
/*
Array
(
[host] => www.washingtontimes.com
[ip] => 38.118.71.70
[info] => Array
(
[host] => theconservatives.com
[country] => United States
[country_code] => USA
[continent] => North America
[region] => Virginia
[latitude] => 38.9687
[longitude] => -77.3411
[organization] => Cogent Communications
[isp] => Cogent Communications
)
)
*/
echo $result['info']['country']; //United States
function get_ip_info($ip = NULL){
if(empty($ip)) $ip = $_SERVER['REMOTE_ADDR'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'http://www.ipaddresslocation.org/ip-address-locator.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST,true);
curl_setopt($ch, CURLOPT_POSTFIELDS,array('ip'=>$ip));
$data = curl_exec($ch);
curl_close($ch);
preg_match_all('/<i>([a-z\s]+)\:<\/i>\s+<b>(.*)<\/b>/im',$data,$matches,PREG_SET_ORDER);
if(count($matches)==0)return false;
$return = array();
$labels = array(
'Hostname' => 'host',
'IP Country' => 'country',
'IP Country Code' => 'country_code',
'IP Continent' => 'continent',
'IP Region' => 'region',
'IP Latitude' => 'latitude',
'IP Longitude' => 'longitude',
'Organization' => 'organization',
'ISP Provider' => 'isp');
foreach($matches as $info){
if(isset($info[2]) && !is_null($labels[$info[1]])){
$return[$labels[$info[1]]]=$info[2];
}
}
return (count($return))?$return:false;
}
?>
答案 1 :(得分:0)
您需要的内置于PHP中。使用gethostbyname方法查找IP地址,然后使用免费的API查找位置(例如MaxMind) PHP中还有一个parse_url方法可以帮助您从URL获取实际的域名。当有更安全的方法时,不要使用shell_exec。