Нужно исправить php код

Discussion in 'PHP' started by RRR_RRR, 28 Oct 2014.

  1. RRR_RRR

    RRR_RRR Member

    Joined:
    20 Jun 2012
    Messages:
    396
    Likes Received:
    35
    Reputations:
    0
    Добрый вечер
    Имеется такой скрипт на пхп

    PHP:
    <?php
        $ip 
    $_SERVER['REMOTE_ADDR'];
        
    $ip_data get_ip_info($ip);
        echo(
    'Hostname ### ' $ip_data['host'] . '<br/>');
        echo(
    'IP Country ### ' $ip_data['country'] . '<br/>');
        echo(
    'IP Country Code ### ' $ip_data['country_code'] . '<br/>');
        echo(
    'IP Continent ### ' $ip_data['continent'] . '<br/>');
        echo(
    'IP Region ### ' $ip_data['region'] . '<br/>');
        echo(
    'IP Latitude ### ' $ip_data['latitude'] . '<br/>');
        echo(
    'IP Longitude ### ' $ip_data['longitude'] . '<br/>');
        echo(
    'Organization ### ' $ip_data['organization'] . '<br/>');
        echo(
    'ISP Provider ### ' $ip_data['isp']);

        function 
    get_ip_info($ip NULL)
        {
           if(empty(
    $ip)) return false;
           
    $ch curl_init();
           
    curl_setopt($chCURLOPT_URL'http://www.ipaddresslocation.org/ip-address-locator.php');
           
    curl_setopt($chCURLOPT_RETURNTRANSFER1);
           
    curl_setopt($chCURLOPT_POSTtrue);
           
    curl_setopt($chCURLOPT_POSTFIELDS, array('ip' => $ip));
           
    $data curl_exec($ch);
           
    curl_close($ch);    
           
    preg_match_all('/<i>([a-z\s]+)\:<\/i>\s+<b>(.*)<\/b>/im'$data$matchesPREG_SET_ORDER);
           if(
    count($matches) == 0) return false;    
           
    $return = array();
           
    $format_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($format_labels[$info[1]]))
              {
                 
    $return[$format_labels[$info[1]]] = $info[2];
              }
           }
           return (
    count($return)) ? $return false;
        }
    ?>

    данный скрипт должен взять айпи пользователя и через сайт .ipaddresslocation.org парсить данные
    но проблема в том что данный скрипт берет не айпи пользователя а айпи сервера
    как это исправить ?
     
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    809
    Reputations:
    231
    Если $_SERVER['REMOTE_ADDR'] возвращает адрес сервера, то это проблема сервера, а не скрипта.
     
    _________________________
  3. RRR_RRR

    RRR_RRR Member

    Joined:
    20 Jun 2012
    Messages:
    396
    Likes Received:
    35
    Reputations:
    0
    он возвращает адрес пользователя но почему то скрип парсит адрес сервера
     
    #3 RRR_RRR, 28 Oct 2014
    Last edited: 28 Oct 2014
  4. Fepsis

    Fepsis Elder - Старейшина

    Joined:
    17 Sep 2008
    Messages:
    791
    Likes Received:
    391
    Reputations:
    72
    Там гет запрос а не пост

    PHP:
    curl_setopt($chCURLOPT_URL'http://www.ipaddresslocation.org/ip-address-locator.php?lookup='.$ip);
    и это лишнее, соответственно:
    PHP:
    curl_setopt($chCURLOPT_POSTtrue);
    curl_setopt($chCURLOPT_POSTFIELDS, array('ip' => $ip));
     
    1 person likes this.
  5. RRR_RRR

    RRR_RRR Member

    Joined:
    20 Jun 2012
    Messages:
    396
    Likes Received:
    35
    Reputations:
    0
    да , теперь работает
    спасибо вам большое