Maison > Article > développement back-end > PHP réalise la fonction de compter avec précision le nombre de personnes en ligne
PHP encapsule très bien l'objet de session. Selon le protocole HTTP, les visiteurs de chaque gamme de sites Web peuvent générer un identifiant unique
echo session_id(); //6ed364143f076d136f404ed93c034201<br />
C'est la clé pour compter le nombre de personnes en ligne. Seulement avec cela. session_id peut également distinguer les visiteurs. Parce que tout le monde est différent.
Ensuite, comment stocker la valeur de la variable de session dans la base de données. Voici une autre fonction
bool session_set_save_handler ( callable $open , callable $close , callable $read , callable $write , callable$destroy , callable $gc ) //callable 可随时支取的,请求即付的,随时可偿还的 // open(string $savePath, string $sessionName) 打开连接 //close() 关闭连接 //read(string $sessionId) 对出数据 //write(string $sessionId, string $data) //写入数据 //destroy($sessionId) //删除数据 //gc($lifetime) //垃圾回收函数
Notez que plusieurs des fonctions ci-dessus ont des paramètres transmis. , il vous suffit de l'indiquer. qu'il y a une transmission entrante. Lorsque PHP exécute le code, il lira automatiquement les paramètres en
session
L'étape suivante consiste à compléter les cinq fonctions ci-dessus et une fonction principale
session_set_save_handler( array("session","open"), array("session","close"), array("session","read"), array("session","write"), array("session","destroy"), array("session","gc") );
La fonction principale est complétée de cette manière.
Remarque :Chaque fois que vous passez la méthode d'un objet en paramètre, vous devez utiliser ce formulaire : array(object, "method name ")
L'étape suivante consiste à écrire chaque fonction
//链接数据的open function open($path,$sessname) { $db = mysql_connect("localhost","root","123456","test"); mysql_select_db("test",$db); mysql_query("SET NAMES UTF8"); return true; }
Les données fermées peuvent être liées à proximité
function close(){ $db = mysql_connect("localhost","root","123456","test"); mysql_close($db); return true; }
La fonction clé est sur le point de démarrer, affichez la fonction de lecture read( ), principalement, la fonction read() a une valeur transmise. Ce qui est transmis est session_id
function read($sid){ $sql = "select data from session where sid='{$sid}' and card='".self::$card."'"; $query = mysql_query($sql) or die(mysql_error()); $row = mysql_fetch_array($query); $row>0?$row["data"]:" "; }
La seconde est la fonction d'écriture. Si les données existent dans la base de données, mettez simplement à jour l'heure, et. les nouvelles données sont écrites
function write($sid,$data) { $sql = "select sid from session where sid='{$sid}' and card='".self::$card."'"; $query = mysql_query($sql) or die(mysql_error()); $mtime = time(); $num = mysql_num_rows($query); if($num){ $sql = "UPDATE session SET data='{$data}', mtime ='{$mtime}'"; }else{ $sql = "INSERT INTO session (sid,data,mtime,ip,card) VALUES('{$sid}','{$data}','".time()."','{$_SERVER['REMOTE_ADDR']}','".self::$card."')"; } mysql_query($sql); return true; }
L'étape suivante est la fonction qui incarne le mécanisme de recyclage PHP. Les deux fonctions ont des paramètres transmis.
function destroy($sid){ $sql = "DELETE FROM session WHERE sid='{$sid}'"; mysql_query($sql) or die(mysql_error()); return true; } function gc($max_time){ $max_time = 600; $sql = "DELETE FROM session WHERE `mtime`<'".(time()-$max_time)."'"; mysql_query($sql) or die(mysql_error()); return true; }
D'accord, les cinq fonctions sont terminées, puis le nombre d'enregistrements de session est lu dans la table de session. Vous pouvez compter avec précision le nombre de personnes visitant la page.
Les enregistrements des utilisateurs qui n'ont pas fonctionné pendant 10 minutes seront effacés.
Code pour implémenter avec précision la méthode de comptage du nombre de personnes en ligne via PHP :
<?php $filename='online.txt';//数据文件 $cookiename='VGOTCN_OnLineCount';//cookie名称 $onlinetime=600;//在线有效时间,单位:秒 (即600等于10分钟) $online=file($filename); //PHP file() 函数把整个文件读入一个数组中。与 file_get_contents() 类似,不同的是 file() 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。如果失败,则返回 false $nowtime=$_SERVER['REQUEST_TIME']; $nowonline=array(); //得到仍然有效的数据 foreach($online as $line){ $row=explode('|',$line); $sesstime=trim($row[1]); if(($nowtime - $sesstime)<=$onlinetime){//如果仍在有效时间内,则数据继续保存,否则被放弃不再统计 $nowonline[$row[0]]=$sesstime;//获取在线列表到数组,会话ID为键名,最后通信时间为键值 } } /* @创建访问者通信状态 使用cookie通信 COOKIE 将在关闭浏览器时失效,但如果不关闭浏览器,此 COOKIE 将一直有效,直到程序设置的在线时间超时 */ if(isset($_COOKIE[$cookiename])){//如果有COOKIE即并非初次访问则不添加人数并更新通信时间 $uid=$_COOKIE[$cookiename]; }else{//如果没有COOKIE即是初次访问 $vid=0;//初始化访问者ID do{//给用户一个新ID $vid++; $uid='U'.$vid; }while(array_key_exists($uid,$nowonline)); setcookie($cookiename,$uid); } $nowonline[$uid]=$nowtime;//更新现在的时间状态 //统计现在在线人数 $total_online=count($nowonline); //写入数据 if($fp=@fopen($filename,'w')){ if(flock($fp,LOCK_EX)){ rewind($fp); foreach($nowonline as $fuid=>$ftime){ $fline=$fuid.'|'.$ftime."\n"; @fputs($fp,$fline); } flock($fp,LOCK_UN); fclose($fp); } } echo 'document.write("'.$total_online.'");';
Ce qui précède explique en détail comment implémenter et compter avec précision le nombre de personnes en ligne en PHP, plus de PHP Pour des connaissances connexes, veuillez visiter le Tutoriel PHP !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!