zoukankan      html  css  js  c++  java
  • php实现统计IP数及在线人数

    原文地址:https://www.wjcms.net/archives/php实现统计ip数及在线人数

    写在前面的话

    很多人有这样的需求,就是统计网站访问IP以及在线的人数。今天我们就看一下具体实现方法。

    开启依赖函数模块

    实现这个功能,需要依赖putenv()函数。下面两种方式均可。

    更改php.ini文件方法

    找到php.ini文件,搜索putenv关键字,删除即可。

    isable_functions = passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
    

    使用宝塔面板

    点击左侧软件管理,找到php,然后设置->禁用函数。

    删除putenv,然后重启php即可。

    实现函数

    在count.php同目录下创建文件:count,temp,online。新建文本文档count.txt,去掉扩展名即为count了;
    linux系统中请设置文件属性为:777。
    文件count.php代码,用到了php函数--explode、isset、empty及sprintf等:

    <?php
    $file             = "count"; // 记数文件名称
    $startno          = "1000";   // 起始数值
    $tempfile         = "temp"; 
    $t_now   = time();
    $t_array = getdate($t_now);
    $day     = $t_array['mday'];
    $mon     = $t_array['mon'];
    $year    = $t_array['year'];
    if (file_exists("$file")) {
            $count_info=file("$file");
            $c_info = explode(",", $count_info[0]);
            $total_c=$c_info[0];
            $yesterday_c=$c_info[1];
            $today_c=$c_info[2];
            $lastday=$c_info[3];
    } else {
            $total_c="$startno";
            $yesterday_c="0";
            $today_c="0";
            $lastday="0";
    }
    
    if ( !isset($HTTP_COOKIE_VARS["countcookie"]) || $HTTP_COOKIE_VARS["countcookie"] != $day) {
            $your_c=1;
            $lockfile=fopen("temp","a");
            flock($lockfile,3);
            putenv('TZ=JST-9');
     
            $t_array2 = getdate($t_now-24*3600);
            $day2=$t_array2['mday'];
            $mon2=$t_array2['mon'];
            $year2=$t_array2['year'];
            $today = "$year-$mon-$day";
            $yesterday = "$year2-$mon2-$day2";
            if ($today != $lastday) {
        
                         if ($yesterday != $lastday) $yesterday_c = "0";
                                  else $yesterday_c = $today_c;
        
                    $today_c = 0;
                    $lastday = $today;
            }
            $total_c++;
            $today_c++;
            $total_c     = sprintf("%06d", $total_c);
            $today_c     = sprintf("%06d", $today_c);
            $yesterday_c = sprintf("%06d", $yesterday_c);
            setcookie("countcookie","$day",$t_now+43200);
            $fp=fopen("$file","w");
            fputs($fp, "$total_c,$yesterday_c,$today_c,$lastday");
            fclose($fp);
            fclose($lockfile);
    }
    if ( empty( $your_c ) ) $your_c = 1;
    setcookie("yourcount",$your_c+1,$t_now+43200);
    $your_c = sprintf("%06d", $your_c);
    //////////////////////////开始统计在线
    $filename="online";
    $onlinetime=600; //同一IP在线时间,单位:秒
    $online_id=file($filename);
    $total_online=count($online_id);
    $ip=getenv("REMOTE_ADDR");
    $nowtime=time();
      for($i=0;$i<$total_online;$i++){
             $oldip=explode("||",$online_id[$i]);
             $hasonlinetime=$nowtime-$oldip[0];
      if($hasonlinetime<$onlinetime and $ip!=$oldip[1]) $nowonline[]=$online_id[$i];
                                      }
             $nowonline[]=$nowtime."||".$ip."||";
             $total_online=count($nowonline);
             $fp=fopen($filename,"w");
             rewind($fp);
             for($i=0;$i<$total_online;$i++){
             fputs($fp,$nowonline[$i]);
             fputs($fp,"n");
                                     }
      fclose($fp);
          if($total_online==0)$total_online=1;
                    $total_online = sprintf("%06d", $total_online);
    ///////////////////////////////////////////////////////
    echo "document.write("·总IP访问:".$total_c."");";
    echo "document.write("<br>");";
    echo "document.write("·昨日访问:".$yesterday_c."");";
    echo "document.write("<br>");";
    echo "document.write("今日IP:".$today_c."");";
    echo "document.write("&nbsp;");";
    echo "document.write("·您 访 问:".$your_c."");";
    echo "document.write("<br>");";
    echo "document.write("当前在线:".$total_online."");";
    exit;
    ?>
    

    调用

    用JS调用文件count.php
    在需要加入统计的的地方,添加:

    <script src="/php/count.php"></script>
    

    关注我更多精彩

  • 相关阅读:
    转部机器人相关的电视剧
    斯坦福大学自然语言处理第一课“引言(Introduction)”
    丹尼斯·洪:讲述他的七种全地形机器人
    斯坦福大学自然语言处理公开课课件汇总
    大数据挖掘
    脑机接口技术真能破译我们的想法吗?
    现代战场 机器人的崛起
    斯坦福大学自然语言处理第三课“最小编辑距离(Minimum Edit Distance)”
    MIT开放式课程“自然语言处理”介绍
    斯坦福大学自然语言处理第六课“文本分类(Text Classification)”
  • 原文地址:https://www.cnblogs.com/wjcms/p/13356805.html
Copyright © 2011-2022 走看看