Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP + MySql + inet_aton
Forum PHP.pl > Forum > PHP
mike
[php:1:aa97ba2be8]<?php
function GetClientIP()
{
$ip = 0;
if(!empty($_SERVER['HTTP_CLIENT_IP']))
$ip = $_SERVER['HTTP_CLIENT_IP'];
if(!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$lista_ip = explode(', ', $_SERVER['HTTP_X_FORWARDED_FOR']);
if($ip)
{
array_unshift($lista_ip, $ip);
$ip = 0;
}
foreach($lista_ip as $value)
if(!eregi("^(192.168|172.16|10|224|127|0).", $value))
return $value;
}
return $ip ? $ip : $_SERVER['REMOTE_ADDR'];
}

function GetClientCountry($ip = '')
{
if(!strlen($ip))
$ip = GetClientIP();
if(!$db = mysql_connect('localhost','root','pass'))
return false;
mysql_select_db('mecho', $db);
$result = mysql_query("SELECT * FROM ip_to_country WHERE ip_start <= inet_aton('".$ip."') AND ip_end >= inet_aton('".$ip."')");
if(!mysql_num_rows($result))
return false;
mysql_close($db);
return mysql_fetch_row($result);//powinien być tylko jeden wiersz
}
?>[/php:1:aa97ba2be8]
Za każdy razem, brak wyników. Dlaczego questionmark.gif
mike
Ustaliłem że nie wyświetla się nic, tylko mi. A wszystkim innym którzy odwiedzą stronę z tym skryptem działa bez zarzutu.
Więc teraz zmieniam pytanie. Dlaczego ja ?
CyklOP
Pewnie dlatego, że serwer stoi u ciebie na localhoscie i wykrywa ci IP:
localhost (albo) 127.0.0.1 (albo) 192.168.0.xxx
zamiast zewnętrznego, czyli np. 213.25.228.xxx

Tak przynajmniej mi się wydaje...

P.S. Bezpośrednio nie da się temu zaradzić, trzeba pokombinować, ale chyba nie będzie to konieczne skoro tylko u Ciebie nie działa?
mike
OK, to wiadomo. Ale ja ten skrypt wrzsiłem na serwer swojej uczelni. Więc ja odwiedzam stronke to skrypt widzi mój adres IP ale nie potrafi wyciągnąć wyniku z bazy. (baza jest i działa na bank)
Mało tego nie wyciągnie IP, ale jak dam inne zapytanie np: SELECT * FROM ... WHERE id=1 to wywali pierwszy rekord.
Dlaczego?

P.S.
http://kni.kul.lublin.pl/~mecho/ip/
Sami zobaczcie
Wankster
Ja mam dwie takie metody z klasy i na localhoście pokazywał mi dobrze Polskę:[php:1:31cc34a1f9]<?php

// ...

function getClientCountry( $strClientIp )
{
if ( preg_match( '/^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}$/', $strClientIp ) === 0 )
{
return false;
}

$GLOBALS[MCMS]->objDatabase->query( "
SELECT
country_code_2,
country_code_3,
country_name
FROM
mcms_countries
WHERE
country_ip_start <= inet_aton( '" . $strClientIp . "' )
&&
country_ip_end >= inet_aton( '" . $strClientIp . "' )
LIMIT 1
" );

return $GLOBALS[MCMS]->objDatabase->numRows() === 1 ? $GLOBALS[MCMS]->objDatabase->fetch() : false;
}

function getClientIp()
{
static $clientIp = 0;

if ( $clientIp !== 0 )
{
return $clientIp;
}

if ( isSet( $_SERVER['HTTP_CLIENT_IP'] ) && ( empty( $_SERVER['HTTP_CLIENT_IP'] ) !== false ) )
{
$clientIp = $_SERVER['HTTP_CLIENT_IP'];
}

if ( isSet( $_SERVER['HTTP_X_FORWARDER_FOR'] ) && ( empty( $_SERVER['HTTP_X_FORWARDER_FOR'] ) !== false ) )
{
$listOfIps = explode( ', ', $_SERVER['HTTP_X_FORWARDER_FOR'] );

if ( $clientIp !== 0 )
{
array_unshift( $listOfIps, $clientIp );

$clientIp = 0;
}

foreach ( $listOfIps AS $value )
{
if ( preg_match( '/^(192.168|172.16|10|224|240|127|0)./', $value ) !== 1 )
{
return $value;
}
}
}

return $clientIp !== 0 ? $clientIp : $_SERVER['REMOTE_ADDR'];
}
// ...

?>[/php:1:31cc34a1f9]Sprawdź w ogóle jakie IP zwraca Ci funkcja GetClientIp()
mike
No właśnie sęk w tym że ta funkcja działa. I problem chyba leży gdzieś indziej. Otóż działa jak inni ten skrypt oglądają, jak ja to robie to mi nie działa.
To mogą być moim zdaniem:
:arrow: Brak mojego numeru IP w bazie (na pewno nie);
:arrow: Błąd dzialania bazy tylko dla mnie (bez sensu), chociaż działa każde inne zaputanie, a poza tym na bazę nie wpływają moje ustawienia kompa.
Nie mam pojęcia dlaczego mi nie działa :?:
Sami sprawdźcie : http://kni.kul.lublin.pl/~mecho/ip/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.