2012-06-03 6 views
0

Вот полезный фрагмент кода для определения местоположения определенного IP-адреса. Нижеприведенная функция принимает один IP-адрес в качестве параметра и возвращает местоположение IP-адреса. Если местоположение не найдено, возвращается UNKNOWN.Определить местоположение по IP-адресу (я получаю пустую страницу. Почему?)

Но я получаю пустую страницу. Зачем?

function detect_city($ip) { 
    $default = 'UNKNOWN'; 

    if (!is_string($ip) || 
     strlen($ip) < 1 || 
     $ip == '127.0.0.1' || 
     $ip == 'localhost') 

     $ip = '8.8.8.8'; 

    $curlopt_useragent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2)  Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)'; 

    $url = 'http://ipinfodb.com/ip_locator.php?ip=' . urlencode($ip); 
    $ch = curl_init(); 

    $curl_opt = array(
     CURLOPT_FOLLOWLOCATION => 1, 
     CURLOPT_HEADER  => 0, 
     CURLOPT_RETURNTRANSFER => 1, 
     CURLOPT_USERAGENT => $curlopt_useragent, 
     CURLOPT_URL  => $url, 
     CURLOPT_TIMEOUT   => 1, 
     CURLOPT_REFERER   => 'http://' . $_SERVER['HTTP_HOST'], 
    ); 

    curl_setopt_array($ch, $curl_opt); 

    $content = curl_exec($ch); 

    if (!is_null($curl_info)) { 
     $curl_info = curl_getinfo($ch); 
    } 

    curl_close($ch); 

    if (preg_match('{<li>City : ([^<]*)</li>}i', $content, $regs)) { 
     $city = $regs[1]; 
    } 
    if (preg_match('{<li>State/Province : ([^<]*)</li>}i', $content, $regs)) { 
     $state = $regs[1]; 
    } 

    if ($city!='' && $state!='') { 
     $location = $city . ', ' . $state; 
     return $location; 
    } 
    else { 
     return $default; 
    } 
} 
+1

Как называется этот метод? Пожалуйста, покажите источник полного кода. – Ruben

+1

Вместо того, чтобы возиться со скрипикой страницы, вы должны рассмотреть возможность использования своего API http://ipinfodb.com/ip_location_api.php. предоставляется php-код, и пользовательский ключ свободен. – fvu

+0

thanks @ fvu Я использую этот источник и отлично работаю, но мне просто нужно показать свой единственный countryCode, что можно сделать для этого?! – user1433591

ответ

0

Эта линия:

if (!is_null($curl_info)) { 
    $curl_info = curl_getinfo($ch); 
} 

$ curl_info не существует и cannot be, видя ваши параметры и код покоя выше. Вместо этого, комментировать if вне и вы должны быть хорошо (проверено на мой IP-адрес):

// if (!is_null($curl_info)) { 
    $curl_info = curl_getinfo($ch); 
// } 
+0

Я снова получаю пустую страницу, могу ли вы опубликовать полную треску, которую вы тестировали на своем ip ?! – user1433591

+1

тот же код, просто прокомментировал эти 2 строки .. но вы можете включить отчет об ошибках, чтобы увидеть, есть ли у вас проблемы: error_reporting (E_ALL); ini_set ("display_errors", 1); в самом верхнем углу вашей страницы ... Вы также можете проверить, действительно ли $ content содержит что-либо (echo $ content) до preg_match. –

3

Вы, вероятно, получите пустую страницу, потому что ошибка в скрипте и PHP не сконфигурирован для отображения ошибок, которые на большинстве интернет-сайтов. Попробуйте включить отображение ошибки при добавлении этого к .htaccess файлу в том же каталоге:

php_flag display_errors on 
php_value error_reporting 7 
0

Надеется, что это помогает :)

function detect_city($ip) { 

    $default = 'UNKNOWN'; 

    if (!is_string($ip) || strlen($ip) < 1 || $ip == '127.0.0.1' || $ip == 'localhost') 
     $ip = '8.8.8.8'; 

    $curlopt_useragent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)'; 

    $url = 'http://ipinfodb.com/ip_locator.php?ip=' . urlencode($ip); 
    $ch = curl_init(); 

    $curl_opt = array(
     CURLOPT_FOLLOWLOCATION => 1, 
     CURLOPT_HEADER  => 0, 
     CURLOPT_RETURNTRANSFER => 1, 
     CURLOPT_USERAGENT => $curlopt_useragent, 
     CURLOPT_URL  => $url, 
     CURLOPT_TIMEOUT   => 1, 
     CURLOPT_REFERER   => 'http://' . $_SERVER['HTTP_HOST'], 
    ); 

    curl_setopt_array($ch, $curl_opt); 

    $content = curl_exec($ch); 

    if (!is_null($curl_info)) { 
     $curl_info = curl_getinfo($ch); 
    } 

    curl_close($ch); 

    if (preg_match('{<li>City : ([^<]*)</li>}i', $content, $regs)) { 
     $city = $regs[1]; 
    } 
    if (preg_match('{<li>State/Province : ([^<]*)</li>}i', $content, $regs)) { 
     $state = $regs[1]; 
    } 

    if($city!='' && $state!=''){ 
     $location = $city . ', ' . $state; 
     return $location; 
    }else{ 
     return $default; 
    } 

} 
Смежные вопросы