Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何查看站点上有多少人,并将其存储为变量?_Php - Fatal编程技术网

Php 如何查看站点上有多少人,并将其存储为变量?

Php 如何查看站点上有多少人,并将其存储为变量?,php,Php,我见过很多在线工具,可以追踪有多少人访问过一个网站 我想知道怎么做,所以不需要第三方网站。我想能够计算有多少人目前在该网站上,并更新它的全球每个人在该网站上 示例:客户端1当前访问我的站点:站点上的01个用户,然后客户端2连接,现在两个客户端都将更新计数器当前:站点上的02个用户 我希望将其存储为变量的原因是,当站点上有一定数量的用户时,会发出通知。示例:网站上有50人以上 如果可能的话,我想主要使用PHP、SQL和/或JS/jQuery。我真的不确定从哪里开始,但我想使用一个文本文档,用PHP

我见过很多在线工具,可以追踪有多少人访问过一个网站

我想知道怎么做,所以不需要第三方网站。我想能够计算有多少人目前在该网站上,并更新它的全球每个人在该网站上

示例:客户端1当前访问我的站点:站点上的01个用户,然后客户端2连接,现在两个客户端都将更新计数器当前:站点上的02个用户

我希望将其存储为变量的原因是,当站点上有一定数量的用户时,会发出通知。示例:网站上有50人以上


如果可能的话,我想主要使用PHP、SQL和/或JS/jQuery。我真的不确定从哪里开始,但我想使用一个文本文档,用PHP更新它,然后使用jQuery.load,这与聊天室实现没有什么不同。虽然聊天室显示所有参与者,但您只对访问者的数量感兴趣


一个简单的入门方法是使用Firebase。有趣的是,您不必为存储/实时通知等构建基础设施。

问题更为根本,这取决于您在站点上的意思。如果你的意思是一个浏览器请求了一个页面,那么从技术上讲,答案几乎总是零,因为一旦请求完成,这个人就不再在网站上了

但是,如果您的意思是只看您的站点就可以了,那么您的问题是有意义的,但是由于一些原因,例如:机器人、本地缓存、代理缓存服务器、共享连接、并行连接等,答案实际上不可能正确回答


但是,如果您坚持要估算积极使用您的站点的用户数量,那么您需要对他们在转到另一个站点或关闭浏览/选项卡或干脆走开之前可能会浏览页面的时间做出一些假设。您还必须对什么算是用户做出一些假设:连接、IP地址、会话、浏览器等。

MySQL您必须自己构建表,但以下是基础

在数据库上创建一个包含3列的表

表名:上次查看

table columns:
id primary, int(11) auto increment
session_id, varchar(255) unique
timestamp, int(11) (make sure this is indexed as well for fast lookups)
现在创建一个表来容纳在线用户的数量:

table name: online_users

id , int(11) primary, autoincrement
online int(11) index
现在来看看代码:

使用php的时间为每个用户设置带有请求时间戳的会话。 1 a。将会话id和时间戳存储到数据库。 通过随时间覆盖会话变量,在每次请求时更新会话 2 a。更新数据库中用户会话id的值。 创建每1分钟运行一次的cronjob。并运行以下php代码 创建ajax文件以将json返回到jQuery 编写jQuery php cronjob

AJAX脚本

jQuery$.getJson


虽然从技术上讲,你可以自己实现它,但你为什么要这么做?对于那些使用网站的人来说,关注什么能为网站增加额外的价值是最重要的

改用:

通过GA实现这一点的好处是,您可以节省服务器资源,并且在这样做时不需要维护任何额外的代码开销。它将随着时间的推移跟踪其他数据,您可以设置其他自定义事件、电子商务跟踪、目标漏斗等等

谷歌实时监控:

谷歌自定义警报可以通过电子邮件或短信通知您预定义的事件

创建自定义警报以监控数据的统计变化 这对你很重要。例如,您可能想知道什么时候 与前一天相比,反弹率增加超过5%,或 当收入比同一天减少10%以上时 一年前

测量您使用的时间段内的正常变化。如果 从一周到另一周的正常波动为5%,那么您可能需要 了解波动何时超过6%或7%

及早发现可能预示新趋势或新趋势的变化 问题可以让你做好准备或做出适当的反应。例如,如果 交通量突然增加了,你可以密切关注事态发展 看看这是反常现象还是趋势的开始。如果有 随着趋势的发展,您可能需要更多的服务器容量或更多的库存 手如果反弹率开始增加,可能会出现不一致 在你的广告和登录页面之间,或者在重要的行动呼吁之间 被一种新的设计所掩盖

将警报配置为发送电子邮件和/或文本消息

在Google Analytics中设置自定义警报: 登录Google Analytics后:

转到管理员 然后在最右侧的“查看”列下选择“自定义警报”。 单击“新建警报” 给它一个名字,超过50名访客。 适用于所有访客 会话结束时提醒我 大于50
嗯,很有意思的解决方案啊,谢谢你浪费我的时间来回答这个问题。要做到这一点,你可以将你的会话系统切换到cu
然后将该数据存储在数据库中。一个站点上的人数就是过去10分钟内看到的用户数,或者你想使用的任何其他数字。Marc在上面链接上的解决方案比我的建议要简单一些,试试看?通常“在站点上”被理解为“在最后X分钟内看到”。合适的时间长短可能会有所不同——可能是五分钟左右?完全不了解电子商务的当前趋势。人们喜欢看有多少人在线。事实如果您使用服务器端脚本在设定的时间间隔内对其进行预计算,则不会占用大量资源。现在从数据库中读取数据非常便宜,还有查询缓存等等。我必须生活在一块石头下面,我从2000年初以来就没有见过网站实时浏览。FB会这样做,但它会向你展示实际的社会相关信息,你认识的人。这里有上下文。在电子商务网站上显示毫无意义的匿名访客就像给司机统计今天有多少人在这条路上开车——没人在乎。我订阅学术和科技新闻组,所以我有点超前。据推测,Ebay正在测试一个新的websocket平台,用户可以浏览这个拍卖展示,并与卖家进行实时问答。旧的是新的,并不意味着它比原来的更好。
//cronjob

$mysqli = new mysqli( your connection variables );

$query = $mysqli->query("SELECT SUM(COUNT *)as online_users FROM FROM last_seen where timestamp > DATE_SUB(NOW(), INTERVAL 1 MINUTE");
if($query->num_rows > 0){
    while($row = $query->fetch_assoc()){
        $onlineusers = (int)$row['online_users'];
    }
    $query = $mysqli->query("SELECT * FROM online_users WHERE 1;");
    if($query->num_rows == 0){
        //we have to insert
        $stmt = $mysqli->prepare("INSERT INTO online_users (online) VALUES (?)");
        $stmt->bind_param('i',$onlineusers);
        $stmt->execute();
        $stmt->close();
    }else{
        //we can just update
        $stmt = $myqli->prepare("UPDATE online_users SET online = ? WHERE id='1';");
        $stmt->bind_param('i',$online);
        $stmt->execute();
        $stmt->close();
    }
}
   //ajax file
   $mysqli = new mysqli( your connection variables );
   $query = $mysqli->query("SELECT online FROM online_users WHERE id='1';");
   while($row = $query->fetch_assoc()){
        $result = $row['online'];
   }
   die(json_encode(array('online_users'=>$result)));
$(function(){
    $.getJSON('/path/to/ajaxfile.php',function(data){
        var online_users = data.online_users;
        $('#online-users').html(online_users);
    })
})