Filtr geolokalizacja IP - co dodać do kodu aby filtrowało mi IP i uruchamiało tylko przy polskim IP?

0

Mam taki o to skrypt (poniżej), który wykonuje mi pewną czynność dla każdego unikalnego użytkownika na stronie. Chciałbym aby skrypt dodatkowo wykonywał się tylko dla userów z polskim IP. Co dodać do kodu aby filtrowało mi IP i uruchamiało tylko przy polskim IP?

<?php


$file = "licznik.txt";



$ipadd = getenv(REMOTE_ADDR);
$addip = "TRUE";
$hits = 0;


if (file_exists($file))
{
} else
{
echo "$file nie istnieje!";
exit;
}


$fp = fopen($file,"r");
while (!feof($fp))
{
$line = fgets($fp, 4096); 
$line=trim($line);
if ($line != "")
{
$hits++;
}
if ($line==$ipadd)
{
$addip = "FALSE";
}
}
fclose($fp);


if ($addip == "TRUE")
{
$fp = fopen($file,"a");
fwrite($fp, "\n");
fwrite($fp, $ipadd);
fclose($fp);
$hits++;
echo "<script language='javascript' src='http://www.aaa.pl/bbb.js'></script>";

}

// Wyświetlanie ilości odwiedzin unikalnych
echo $hits;
?> 
0

"geolokalizacja ip php" w Google

0

Poszukałem i znalazłem taki o to skrypt:

<pre><?php
$dane = unserialize(
   file_get_contents(
      'http://api.ip2geo.pl/php/?ip='.$_SERVER['REMOTE_ADDR']
   )
);
if(!$dane['errcode']) {
   echo 'Kraj: '.$dane['country']."\n";
}
?></pre>
 

Wynik z mojego IP to PL.

Zmodyfikowałem go w taki o to sposób:

<?php
$dane = unserialize(
   file_get_contents(
      'http://api.ip2geo.pl/php/?ip='.$_SERVER['REMOTE_ADDR']
   )
);
if(!$dane['errcode']=='PL')

 {
   echo 'Kraj:JEST POPRAWNIE ';


}
 else {
echo 'Kraj:JEST NIEPOPRAWNIE ';
}

?>
 

Coś jednak w skrypcie nie działa jak należy. Pomoże ktoś?

0

Jedna zmienna odpowiada za błąd (errcode), druga za kraj (country). Uważaj co robisz ;)

A drugie, że porównanie !$zmienna == 'cos' nigdy nie da Ci oczekiwanego rezultatu. Jak już to $zmienna != 'cos'.

Podstawy języka PHP.

1

Chciałbym aby skrypt dodatkowo wykonywał się tylko dla userów z polskim IP
Nie traktowałbym wyników z geolokalizacji IP zbyt wiarygodnie, bowiem często jestem wykrywany jako USA…

0
dzek69 napisał(a):

Jedna zmienna odpowiada za błąd (errcode), druga za kraj (country). Uważaj co robisz ;)

A drugie, że porównanie !$zmienna == 'cos' nigdy nie da Ci oczekiwanego rezultatu. Jak już to $zmienna != 'cos'.

Podstawy języka PHP.

Dzięki za wskazówki. No php jest mi obce i tylko czasem potrzebuję coś skombinować i tak szukam.

Trochę zminiłem kod;

 

<?php
$dane = unserialize(
   file_get_contents(
      'http://api.ip2geo.pl/php/?ip='.$_SERVER['REMOTE_ADDR']
   )
);
if($_dane['country']!='PL' {
   echo 'Kraj: jest poprawny' ;
}
else {
echo 'Kraj: jest niepoprawny' ;
}
?>



Jednak nadal nie działa jak należy:/. Proszę o kolejne wskazówki.

0

ech. nie możesz raz zmiennej nazywać $dane, a raz $_dane. no po prostu nie....
CZYTAJ to, co napiszesz

0
dzek69 napisał(a):

ech. nie możesz raz zmiennej nazywać $dane, a raz $_dane. no po prostu nie....
CZYTAJ to, co napiszesz

A to wkradł mi się tutaj błąd na forum, na serwerze mam poprawnie $dane, jednak właśnie wyświetla mi się kraj PL ale mimo to także informacja, że "Kraj: jest niepoprawny" i tutaj kończą mi się pomysły.

0

Pomysły to przede wszystkim czy upewnij się czy w ogóle działa funkcja file_get_contents , zrób var_dump($dane); i pokaż co tam zwraca no i chyba nie != (rózny) zresztą sprawdź ten kod:

<?php
$dane = unserialize(
   file_get_contents(
      'http://api.ip2geo.pl/php/?ip='.$_SERVER['REMOTE_ADDR']
   )
);
var_dump($dane); //tymczasowo dio testu zobacz co zwraca

if (strcmp($dane['country'], 'PL') == 0) {
	echo 'Kraj: jest poprawny' ;
}
else {
	echo 'Kraj: jest niepoprawny' ;
}
?>

I jeżeli nie działa napisz co zwróciło var_dump.

0

w poprzednim poście oprócz błędnej nazwy zmiennej miałeś negację warunku (jeżeli NIE polska, to pisz, że kraj poprawny)

1 użytkowników online, w tym zalogowanych: 0, gości: 1