[PHP] Scrie IP vizitatorilor

Despre programarea aplicațiilor web și nu numai, cu PHP, baze de date și altele.
Discutiile despre utilizarea si modificarea scripturilor se desfasoara in aria Webmaster.
Discuțiile despre proiectarea și optimizarea bazelor de date se desfășoară în aria Databases.
Avatar utilizator
MariusExygo
Fost Helper

Fost Helper
Mesaje: 2063
Membru din: 09 Mar 2014, 15:47
Server: WildFantasy
Regat: Jinno
Aprecieri: 156  
Mulţumiri: 226  
  Rezolvări prob.: 4
Discord: Copiază ID
 Contact:
Medalii

Salut, aveam nevoie de un script care sa-mi salveze adresele de IP ale vizitatorilor, l-am facut, merge si ma plictiseam asa ca am zis sa-l postez ...

Nu e chiar un script, ci o functie mititica


Ce face aceasta functie?
Inregistreaza intr-un fisier text(TXT) adresa IP a vizitatorilor dar cu conditia ca fisierul respectiv sa nu contina adresa IP a vizitatorului(Pe scurt, sa scrie doar odata adresa)

Functie PHP:

Cod: Selectaţi tot

function scrie_ip_la_vizitare() {
//// Exygo
	if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
		$ip = $_SERVER['HTTP_CLIENT_IP'];
	} 
	
	elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
		$http = $_SERVER['HTTP_X_FORWARDED_FOR'];
		$tmpip=explode(",", $http);
		$ip = trim($tmpip[0]);	
	} 
	
	else {
		$ip = $_SERVER['REMOTE_ADDR'];
	}
//// Acum ca am aflat IP-ul sa compunem continutul

	$time = date("h:i:s A l - dS F Y");  // Timpul in format ORA:MINUT:SECUNDA [PM SAU AM] ZIUA - DATA LUNA AN
	$ip_adress = "IP: ".$ip."\r\nTime: ".$time."\r\n[SCRIPT] BY Exygo\r\n\r\n\r\n"; // \r\n este un spatiu pentru a delimina liniile
	$txt_dir = '[LOG] IP UNICE VIZITATORI.txt'; // directorul in care sa se salveze fisierul

	if ( !file_exists($txt_dir)) { // VERIFICA SA NU FIE CREAT DEJA FISIERUL
		
		$file = fopen($txt_dir,'a'); // declaram file
		fwrite($file,$ip_adress); // declaram actiunea pentru file, in cazul nostru write iar dupa virgula ce sa scrie
		fclose($file); // inchidem actiunea pentru a nu se repeta
	}

	else { // daca exista un fisier ->
		// declaram si read pentru a face alta verificare
		$file = fopen($txt_dir, 'r');
		$read_txt = fread($file, filesize($txt_dir) + 1);
		fclose($file);
		//
		
		// verifica daca fisierul contine o portiune de  text
		if( preg_match( "/$ip/", $read_txt ) ) {
			return;
			// daca contine acelas IP numai scrie din nou
		}
		
		else { // daca nu gaseste acelas IP deja scris in fisier, atunci il scrie
			$file = fopen($txt_dir,'a');
			fwrite($file,$ip_adress);
			fclose($file);
		}
	}
}
De preferat bagati aceasta functie in fisierul cu functii al site-ului vostru sau in index.

Cod: Selectaţi tot

scrie_ip_la_vizitare();
Ati declarat functia, bun acum executati-o! De preferat puneti acea linie in index-ul site-ului dvs.


Si daca doriti sa aveti si un log care inregistreaza mereu adresele IP, pentru a stii cu exactitate de cate ori un vizitator a accesat site-ul vostru, folositi aceasta functie:

Cod: Selectaţi tot

function scrie_ip_accesari() {
////
	if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
		$ip = $_SERVER['HTTP_CLIENT_IP'];
	} 
	
	elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
		$http = $_SERVER['HTTP_X_FORWARDED_FOR'];
		$tmpip=explode(",", $http);
		$ip = trim($tmpip[0]);	
	} 
	
	else {
		$ip = $_SERVER['REMOTE_ADDR'];
	}
//// Acum ca am aflat IP-ul sa compunem continutul

	$time = date("h:i:s A l - dS F Y");  // Timpul in format ORA:MINUT:SECUNDA [PM SAU AM] ZIUA - DATA LUNA AN
	$ip_adress = "IP: ".$ip."\r\nTime: ".$time."\r\n[SCRIPT] BY Exygo\r\n\r\n\r\n"; // \r\n este un spatiu pentru a delimina liniile
	$txt_dir = '[LOG] ACCESARI VIZITATORI.txt'; // directorul in care sa se salveze fisierul

		
	$file = fopen($txt_dir,'a'); // declaram file
	fwrite($file,$ip_adress); // declaram actiunea pentru file, in cazul nostru write iar dupa virgula ce sa scrie
	fclose($file); // inchidem actiunea pentru a nu se repeta
}

Cod: Selectaţi tot

scrie_ip_accesari();
Ati declarat functia, bun acum executati-o! De preferat puneti acea linie in index-ul site-ului dvs.
Afișează semnătura
Avatar utilizator
wildramen
Nou Venit

Nou Venit
Mesaje: 43
Membru din: 24 Oct 2014, 18:27
Aprecieri: 0
Mulţumiri: 0
 Contact:
Medalii

Și funcția următoare este în regulă, și un pic mai economică la scris:

Cod: Selectaţi tot

		function getClientIP() 
		{
			if(isset($_SERVER)) {
			if(isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
				return $_SERVER["HTTP_X_FORWARDED_FOR"];
	
			if(isset($_SERVER["HTTP_CLIENT_IP"]))
				return $_SERVER["HTTP_CLIENT_IP"];
	
			return $_SERVER["REMOTE_ADDR"];
		}
Și folosiți următoarea linie pentru a scrie undeva IP-ul:

Cod: Selectaţi tot

echo getClientIP();
Feel free to ask me anything about web programming (both backend and frontend).
Afișează semnătura
Avatar utilizator
emoemolizu
Nivel 3

Nivel 3
Mesaje: 487
Membru din: 20 Mar 2014, 13:37
Server: metin2aow
Regat: Jinno
Aprecieri: 91  
Mulţumiri: 6  
Discord: Copiază ID
 Contact:
Medalii

felicitari exygo asa poti depista si ip care te flodeaza si il poti bloca :>
Imagine
Ai nevoie de un site pentru afacerea ta? Intra pe www.ivmar.ro
Afișează semnătura
Avatar utilizator
MariusExygo
Fost Helper

Fost Helper
Mesaje: 2063
Membru din: 09 Mar 2014, 15:47
Server: WildFantasy
Regat: Jinno
Aprecieri: 156  
Mulţumiri: 226  
  Rezolvări prob.: 4
Discord: Copiază ID
 Contact:
Medalii

emoemolizu scrie:felicitari exygo asa poti depista si ip care te flodeaza si il poti bloca :>
Nu, doar IP-ul celui/celei ce intra pe site-ul tau


Update:

Daca doriti ca IP-ul sa arate asa:
0-0-0-0.rdsnet.ro

Inlocuiti linia:
$ip_adress = "IP: ".$ip."\r\nTime: ".$time."\r\n[SCRIPT] BY Exygo\r\n\r\n\r\n";

cu
$ip_adress = "IP: ".$ip."\r\nTime: ".$time."\r\n[SCRIPT] BY Exygo\r\n".$hostname."\r\n\r\n\r\n";

iar mai sus de ea adaugati linia:
$hostname = gethostbyaddr($ip);



wildramen scrie:Și funcția următoare este în regulă, și un pic mai economică la scris:

Cod: Selectaţi tot

		function getClientIP() 
		{
			if(isset($_SERVER)) {
			if(isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
				return $_SERVER["HTTP_X_FORWARDED_FOR"];
	
			if(isset($_SERVER["HTTP_CLIENT_IP"]))
				return $_SERVER["HTTP_CLIENT_IP"];
	
			return $_SERVER["REMOTE_ADDR"];
		}
Și folosiți următoarea linie pentru a scrie undeva IP-ul:

Cod: Selectaţi tot

echo getClientIP();
$_SERVER["HTTP_X_FORWARDED_FOR"] -> Returneaza mai multe... deaia am modificat-o

Iar functia getClientIP() doar iti returneaza adresa.. e acelas -cenzurat- cu ce am pus eu numai ca tu ii dai echo, nu vreau sa apara pe index, ci sa mi-l scrie intr-un fisier TXT.
Afișează semnătura
Avatar utilizator
wildramen
Nou Venit

Nou Venit
Mesaje: 43
Membru din: 24 Oct 2014, 18:27
Aprecieri: 0
Mulţumiri: 0
 Contact:
Medalii

Exygo scrie:
emoemolizu scrie:felicitari exygo asa poti depista si ip care te flodeaza si il poti bloca :>
Nu, doar IP-ul celui/celei ce intra pe site-ul tau


Update:

Daca doriti ca IP-ul sa arate asa:
0-0-0-0.rdsnet.ro

Inlocuiti linia:
$ip_adress = "IP: ".$ip."\r\nTime: ".$time."\r\n[SCRIPT] BY Exygo\r\n\r\n\r\n";

cu
$ip_adress = "IP: ".$ip."\r\nTime: ".$time."\r\n[SCRIPT] BY Exygo\r\n".$hostname."\r\n\r\n\r\n";

iar mai sus de ea adaugati linia:
$hostname = gethostbyaddr($ip);



wildramen scrie:Și funcția următoare este în regulă, și un pic mai economică la scris:

Cod: Selectaţi tot

		function getClientIP() 
		{
			if(isset($_SERVER)) {
			if(isset($_SERVER["HTTP_X_FORWARDED_FOR"]))
				return $_SERVER["HTTP_X_FORWARDED_FOR"];
	
			if(isset($_SERVER["HTTP_CLIENT_IP"]))
				return $_SERVER["HTTP_CLIENT_IP"];
	
			return $_SERVER["REMOTE_ADDR"];
		}
Și folosiți următoarea linie pentru a scrie undeva IP-ul:

Cod: Selectaţi tot

echo getClientIP();
$_SERVER["HTTP_X_FORWARDED_FOR"] -> Returneaza mai multe... deaia am modificat-o

Iar functia getClientIP() doar iti returneaza adresa.. e acelas -cenzurat- cu ce am pus eu numai ca tu ii dai echo, nu vreau sa apara pe index, ci sa mi-l scrie intr-un fisier TXT.
M-am referit doar de funcția de afișare, nu și de scriere-citire a unui fișier .txt. Și nu returnează mai multe pentru că doar unul dintre return-uri o să se întoarcă la un moment dat. :)
Feel free to ask me anything about web programming (both backend and frontend).
Afișează semnătura
Avatar utilizator
[GF]Klaus
Nou Venit

Nou Venit
Mesaje: 34
Membru din: 23 Oct 2015, 16:28
Server: Metin2King.ro
Regat: Jinno
Aprecieri: 0
Mulţumiri: 0
Medalii

Folositor ! Bravo

[ Mesaj scris via Android ] Imagine
Răspunde

Înapoi la “Tutoriale scripting”

  • Informaţie
  • Cine este conectat

    Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 2 vizitatori