Heim  >  Artikel  >  Backend-Entwicklung  >  Wie man die Anzahl der Online-Personen in PHP implementiert und genau zählt

Wie man die Anzahl der Online-Personen in PHP implementiert und genau zählt

伊谢尔伦
伊谢尔伦Original
2017-06-22 14:02:333302Durchsuche

Das Beispiel in diesem Artikel beschreibt die Methode zum Zählen der Anzahl der Personen, die in PHP online sind. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

PHP kapselt das Sitzungsobjekt sehr gut. Gemäß dem HTTP-Protokoll können Besucher jeder Website-Reihe eine eindeutige Kennung generieren

echo session_id();
//6ed364143f076d136f404ed93c034201<br />

Dies ist der Schlüssel zum Zählen der Anzahl der Personen, die online sind. Nur mit dieser Sitzungs-ID können wir die Personen unterscheiden, die uns besuchen. Weil jeder anders ist.
Als nächstes erfahren Sie, wie der Wert in der Sitzungsvariablen in der Datenbank gespeichert wird.

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) //垃圾回收函数

Hinweis , es gibt oben mehrere Funktionen: Falls vorhanden Wenn Sie Parameter übergeben, müssen Sie nur angeben, dass sie übergeben werden. Wenn PHP den Code ausführt, liest es automatisch die Parameter in der

Sitzung

Der nächste Schritt besteht darin, die oben genannten fünf Funktionen und eine Hauptfunktion abzuschließen

session_set_save_handler(
   array("session","open"),
   array("session","close"),
   array("session","read"),
   array("session","write"),
   array("session","destroy"),
   array("session","gc")
);

Die Hauptfunktion wird auf diese Weise abgeschlossen.

Hinweis: Jede Methode, die ein Objekt als Parameter übergibt, muss diese Form verwenden: array(object, "method name")

Der nächste Schritt besteht darin, jede Funktion zu schreiben

//链接数据的open
function open($path,$sessname) {
  $db = mysql_connect("localhost","root","123456","test");
  mysql_select_db("test",$db);
  mysql_query("SET NAMES UTF8");
  return true;
}

Daten schließen, die verknüpft werden können

function close(){
$db = mysql_connect("localhost","root","123456","test");
mysql_close($db);
return true;
}

Die Schlüsselfunktion startet gleich und zeigt die an Lesefunktion read(), hauptsächlich die read()-Funktion hat einen übergebenen Wert. Der übergebene Wert ist session_id

function read($sid){
  $sql = "select data from session where sid=&#39;{$sid}&#39; and card=&#39;".self::$card."&#39;";
  $query = mysql_query($sql) or die(mysql_error());
  $row = mysql_fetch_array($query);
  $row>0?$row["data"]:" ";
}

Der zweite ist die Schreibfunktion, wenn die Daten in der Datenbank vorhanden sind Solange die Aktualisierungszeit abgelaufen ist, werden neue Daten in

function write($sid,$data)
{
   $sql = "select sid from session where sid=&#39;{$sid}&#39; and card=&#39;".self::$card."&#39;";
   $query = mysql_query($sql) or die(mysql_error());
   $mtime = time();
   $num = mysql_num_rows($query);
   if($num){
    $sql = "UPDATE session SET data=&#39;{$data}&#39;, mtime =&#39;{$mtime}&#39;";
   }else{
    $sql = "INSERT INTO session (sid,data,mtime,ip,card) VALUES(&#39;{$sid}&#39;,&#39;{$data}&#39;,&#39;".time()."&#39;,&#39;{$_SERVER[&#39;REMOTE_ADDR&#39;]}&#39;,&#39;".self::$card."&#39;)";
   }
   mysql_query($sql);
   return true;
}

geschrieben. Der nächste Schritt ist die Funktion, die den PHP-Recyclingmechanismus verkörpert. Beide Funktionen verfügen über übergebene Parameter.

function destroy($sid){
  $sql = "DELETE FROM session WHERE sid=&#39;{$sid}&#39;";
  mysql_query($sql) or die(mysql_error());
  return true;
}
function gc($max_time){
  $max_time = 600;
  $sql = "DELETE FROM session WHERE `mtime`<&#39;".(time()-$max_time)."&#39;";
  mysql_query($sql) or die(mysql_error());
  return true;
}

Okay, die fünf Funktionen sind abgeschlossen und dann wird die Anzahl der Sitzungsdatensätze aus der Sitzungstabelle ausgelesen. Sie können die Anzahl der Personen, die die Seite besuchen, genau zählen.

Benutzerdatensätze, die 10 Minuten lang nicht bedient wurden, werden gelöscht.

Der Code zur genauen Implementierung der Methode zum Zählen von Online-Personen über PHP:

<?php
$filename=&#39;online.txt&#39;;//数据文件
$cookiename=&#39;VGOTCN_OnLineCount&#39;;//cookie名称
$onlinetime=600;//在线有效时间,单位:秒 (即600等于10分钟)
  
$online=file($filename);
//PHP file() 函数把整个文件读入一个数组中。与 file_get_contents() 类似,不同的是 file() 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。如果失败,则返回 false
$nowtime=$_SERVER[&#39;REQUEST_TIME&#39;];
$nowonline=array();
//得到仍然有效的数据
foreach($online as $line){
  $row=explode(&#39;|&#39;,$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=&#39;U&#39;.$vid;
  }while(array_key_exists($uid,$nowonline));
  setcookie($cookiename,$uid);
}
$nowonline[$uid]=$nowtime;//更新现在的时间状态
//统计现在在线人数
$total_online=count($nowonline);
//写入数据
if($fp=@fopen($filename,&#39;w&#39;)){
  if(flock($fp,LOCK_EX)){
    rewind($fp);
    foreach($nowonline as $fuid=>$ftime){
      $fline=$fuid.&#39;|&#39;.$ftime."\n";
      @fputs($fp,$fline);
    }
    flock($fp,LOCK_UN);
    fclose($fp);
  }
}
echo &#39;document.write("&#39;.$total_online.&#39;");&#39;;

Das obige ist der detaillierte Inhalt vonWie man die Anzahl der Online-Personen in PHP implementiert und genau zählt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn