Creare script persoane online

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
Avatar utilizator
steell
Mesaje:190

Creare script persoane online

salut marplo.
Vreu sa fac un script care sa arate cate persoane sunt pe pagina respectiva (sau site).
Imi poti da niste indicii cum ar trebui sa fac?
Eu m-am gandit asa: cand intra pe pagina se verifica daca ip-ul exista intr-un fisier txt, daca nu, se adauga acolo pe linie noua apoi se numara cu file() cate sunt si se afiseaza nr respectiv in pagina.
Problema este ca atunci cand iese din pagina IP-ul trebuie sa se stearga din fisier, insa asta nu stiu cum sa fac.
Am testat si scriptul de pe site insa nu inteleg cum functioneaza.
Niste idei cum sa procedez ar fi bune
Multumesc

MarPlo Mesaje:4343
Pe langa IP, pe aceeasi linie trebuie adaugat si timpul unix, cu time(), cand a vizitat ultima pagina, exemplu IP^12784567.
Se preia cu file() randurile, se parcurge fiecare rand si se separa cu explode IP-ul de timp. Apoi se verifica daca acel timp plus de exemplu 1 minut e mai mic decat timpul curent. Daca e mai mic se sterge cu unset() acea linie din array-ul cu randuri din fisier.
Astfel se retin doar randurile din ultimul minut, pe care le rescrii in fisier.
Mai departe, mai studiaza cu atentie script-ul care l-ai gasit pe site, poate intelegi modul cum functioneaza.

steell Mesaje:190
salut marplo
am facut scriptul asta dar imi introduce prima data ip si timpul in fisier insa cand dau refresh la pagina peste un minut nu sterge linia cu timpul mai mic decat timp curent

Cod: Selectaţi tot

<?php
// preia randurile din "pers-online.txt" in array
$ardata = file('pers-online.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$nrows = count($ardata);

$timp = time();

for ($n=0; $n<$nrows; $n++) {
	$exp = explode('^', $ardata[$n]);
	$timptrecut = $exp[1]+60;
	if ($timptrecut < $timp) {
	unset($ardata[$n]);
	}
}

$ardata = array_merge($ardata);      // reordoneaza cheile in array

	$d = count($ardata);
	for ($n=0; $n<$d; $n++) {
		$filen = "pers-online.txt";
		$handlen = fopen($filen, "a+");
		fwrite($handlen,$ardata[$n].'
');
		fclose($handlen);
	}



//Adauga ip si timpul vizitatorului in fisier (daca acesta nu exista)
$ip = $_SERVER['REMOTE_ADDR'];
$preia = file_get_contents('pers-online.txt');
$cauta = substr_count($preia, $ip);
if ($cauta == 0) {
	$file = "pers-online.txt";
	$handle = fopen($file, "a+");
	fwrite($handle,$ip.'^'.$timp.'
');
	fclose($handle);
}

//arata vizitatori online
$ardata = file('pers-online.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$nrows = count($ardata);
echo '<br />Online: '.$nrows;
?>

MarPlo Mesaje:4343
Salut
Nu stiu care e problema, prea mult cod de urmarit si inteles. Poate cand dai refresh sterge linia si o adauga iar cu timpul de la refresh, asa cum trebuie sa lucreze.
Poti verifica cu: print_r($ardata); ce randuri contine acel array, dupa parcurgere si unset().
In loc de atata cod cu fopen() si fwrite(), poti scrie in fisier randurile din $ardata folosind simplu aceasta functie:
file_put_contents('pers-online.txt', implode("\r\n", $ardata));

Subiecte similare