Inregistrare IP-uri vizitatori

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
Komfort
Mesaje:157

Inregistrare IP-uri vizitatori

scuze ca te mai deranjez odata..

Cod: Selectaţi tot

<?php
$ip_vizitator=$_SERVER['REMOTE_ADDR'];
$fisier='ctr.txt';
$fh=@fopen($fisier,"r+b");
if(!$fh)
echo "nu a fost deschis fisierul respectiv";
else { 
$s=fgets($fh,4);
$s++;
echo $ip_vizitator;
rewind($fh);
fwrite($fh,$ip_vizitator,$s);
echo 'ai';
echo $s;
echo 'paini ';
fclose($fh);
}
?>
vreau sa se salveze intrun fisier crt.txt....doate ipurile vizitatorilor......si apoi fac cu un if...daca ipvizitator exista deja..sa nu mai intre in fisier

Komfort Mesaje:157
am facut dar cum fac sa am mai multe randuri ca mie se salveaza numai pe primul rand

Cod: Selectaţi tot

<?php
$ip_vizitator=$_SERVER['REMOTE_ADDR'];
$fisier='ctr.txt';
$rand=file('ctr.txt');
$fh=@fopen($fisier,"r+b");
if(!$fh)
echo "nu a fost deschis fisierul respectiv";
else { 
 $rand[0]=$ip_vizitator;
rewind($fh);
fwrite($fh,$rand[0]);

fclose($fh);
}
?>

MarPlo Mesaje:4343
Ca sa adaugi un nou rand, se foloseste sintaxa "\n"
De exemplu, ca sirul "Un sir test" sa fie adaugat pe un rand nou, se pune acea sintaxa in fata. Variabila care sa-l contina ar fi cam asa:
$var = "\n". 'Un sir test';

- Mai departe, e treaba fiecaruia cum stie sa aplice asta.
Mai sunt si tutoriale pe net, daca ne straduim sa cautam, de exemplu "php add new row file"

Komfort Mesaje:157
eu as vrea sa se stocheze toate ipurile vizitatorilor diferiti:(...rand[0] rand[1] rand[2] rand[3] si tot asa.....:(

MarPlo Mesaje:4343
Se pare ca ceea ce vrei iti depaseste cunostintele pe care le ai despre php.
E mai complicat si diferit de cum ai inceput tu. Eu asi face altfel, cu functii: "file()", "explode()", "file_put_contents()" si lucru cu Array; ceea ce nu se potriveste cu ce ai inceput tu, prin urmare ar iesi o brambureala amestecarea cu scriptul tau.
Poate o sa fac un tutorial despre asta in zilele urmatoare. Deocamdata am altceva in lucru inceput.

- Ca sa fie totusi de folos raspunsul, pentru adaugare date in continuarea celor existente, cand fisierul e deschis cu "fopen()", se foloseste "a+b" ca mod de deschidere (in loc de "r+b" cum e la tine). Gasesti in lectiile despre Lucrul cu fisiere si despre modurile de deschidere cu "fopen()" (pentru citire, scriere, adaugare).

Komfort Mesaje:157

Cod: Selectaţi tot

<?php

$ip_vizitator=$_SERVER['REMOTE_ADDR'];
$fisier='ctr.txt';

$rand=file('ctr.txt');
$fh=@fopen($fisier,"a+b");
$s=fread($fisier,200);
if(!$fh || $ip_vizitator==$s)

{ echo "nu a fost deschis fisierul respectiv"; }
else { 
 $rand[0]=$ip_vizitator;

rewind($fh);
fwrite($fh,$rand[0]);

fclose($fh);}
?>
asa oare e bun pt vizitatori unici...cu if-ul ala sus $s=fread($fisier,200);
if(!$fh || $ip_vizitator==$s)


adika ipul vizitatorului sa nu fie acesai cu ce este in ctr.txt?

MarPlo Mesaje:4343
Cum ti-am mai spus. Metoda care ai inceput-o pt. ceea ce vrei sa faci e nepotrivita si nu ma bag pe ea. Eu nu asi fi folosit deschiderea cu "fopen()", ci se preia cu "file()" iar pt. scriere adaugam direct cu "file_put_contents()".
In plus, trebuie verificat sa nu adauge de mai multe ori acelasi IP. Pentru asta, din matricea obtinuta in $rand se parcurge cu instructiunea "for()" fiecare rand si se verifica cu ip-ul curent.

Daca ai rabdare pana o sa pun un tutorial despre asa ceva, bine.

Komfort Mesaje:157

Cod: Selectaţi tot

<?php
$fisier='ctr.txt';
$ip=$_SERVER['REMOTE_ADDR'];
$rand=file('ctr.txt');
$numara=count($rand);
$rand[0]=$ip;
for($i=0;$i<$numara;$i++) { 
if($ip!=$rand[i]){
file_put_contents($fisier,$rand[0]);
}
}
?>
sper sa fiu pe aproape..te rog corecteazama...
multumesc

MarPlo Mesaje:4343
Da, asa e pe aproape. Uite varianta imbunatatita, dupa codul tau.

Cod: Selectaţi tot

<?php
$fisier='ctr.txt';
$rand = array();
$unic = 1;
$ip=$_SERVER['REMOTE_ADDR'];

$rand=file('ctr.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$numara=count($rand);
for($i=0;$i<$numara;$i++) {
  if($ip==$rand[$i]){
	$unic = 0;
	echo 'IP deja inregistrat';
   break;
  }
}

if($unic===1) {
  $rand[$i] = $ip;
  $randuri = implode("\n", $rand);
  if(file_put_contents($fisier, $randuri)) echo 'IP adaugat';
}
?>

MarPlo Mesaje:4343
Daca nu e deja salvat il va include in matricea $rand si pune totul in $fisier. Testeaza si vezi.
Ce functii nu intelegi, vezi in manual

Komfort Mesaje:157
salveaza doar primu ip si apoi zice ip deja inregistrat tot timpu:(....oare ceo fi? :?:

MarPlo Mesaje:4343
Acum functioneaza.