一个在奔跑线上
不断努力奋斗的PHP开发程序猿

php实现统计IP数及在线人数

前言

对于很多站长基本都有这样的需求,就是统计网站访问IP以及在线的人数,今天给大家带来通过PHP具体实现统计,不过只缘余生在这里建议大家使用百度统计哦。

开启依赖函数模块

实现这个功能,需要依赖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后点击删除就ok

实现函数

在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>
赞(118) 打赏
未经允许不得转载:只缘余生 » php实现统计IP数及在线人数

评论 4

7 + 7 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    欢迎互访

    洋得意网 4年前 (2020-07-26) 来自天朝的朋友 谷歌浏览器 Windows 7 回复
  2. #2

    来看下,记得回访哦

    分享轻音乐 4年前 (2020-07-27) 来自天朝的朋友 谷歌浏览器  MI CC 9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.96 Mobile Safari/537.36 回复
  3. #3

    很实用的php统计方法 让我不懂技术的都可以用

    商业智库 4年前 (2020-07-28) 来自天朝的朋友 谷歌浏览器 Windows 7 回复
  4. #4

    不错

    夸克Radio 4年前 (2020-09-03) 来自天朝的朋友 火狐浏览器 Windows 10 回复

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏