php实现统计IP数及在线人数的示例代码
发布:smiling 来源: PHP粉丝网 添加日期:2022-03-19 15:04:47 浏览: 评论:0
这篇文章主要介绍了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 ( emptyempty( $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(" ");";
- echo "document.write("·您 访 问:".$your_c."");";
- echo "document.write("<br>");";
- echo "document.write("当前在线:".$total_online."");";
- exit;
- ?>
调用
用JS调用文件count.php
在需要加入统计的的地方,添加:
<script src="/php/count.php"></script>
Tags: php统计IP数 php在线人数
- 上一篇:PHP程序守护进程化实现方法详解
- 下一篇:最后一页
相关文章
- ·php模仿asp Application对象在线人数统计实现方法(2021-05-05)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)