我可以获得网站的位置吗?

时间:2012-09-18 14:28:06

标签: php javascript geolocation location

让我以一个例子来解释: -

假设http://www.washingtontimes.com/news/2012/sep/18/pentagon-stops-training-partnering-afghan-troops-b/是用户提交的网址,现在我需要的是php或javascript中的方法或任何其他网络脚本语言,它可以为我提供与上面的网址相对应的位置,比如这个网站在哪个国家托管, 在这种情况下,结果应该是“美国”。这是由http://www.site24x7.com等许多网站完成的,但我需要一个代码才能做到这一点

2 个答案:

答案 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。