php实现统计IP数及在线人数的示例代码

2020-09-01 10:37:39

写在前面的话

很多人有这样的需求,就是统计网站访问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,然后设置->禁用函数。

php实现统计IP数及在线人数的示例代码

删除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;?>

php实现统计IP数及在线人数的示例代码

调用

用JS调用文件count.php

在需要加入统计的的地方,添加:

<script src="/php/count.php"></script>
相关文章 大家在看