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


Posted in PHP onJuly 22, 2020

写在前面的话

很多人有这样的需求,就是统计网站访问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(" ");";
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>

到此这篇关于php实现统计IP数及在线人数的示例代码的文章就介绍到这了,更多相关php 统计IP数及在线人数内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PHP 相关文章推荐
PHP.MVC的模板标签系统(三)
Sep 05 PHP
php 在线打包_支持子目录
Jun 28 PHP
php递归列出所有文件和目录的代码
Sep 10 PHP
php提示undefined index的几种解决方法
May 21 PHP
php ci框架中加载css和js文件失败的原因及解决方法
Jul 29 PHP
php编写批量生成不重复的卡号密码代码
May 14 PHP
PHP查找与搜索数组元素方法总结
Jun 12 PHP
PHP使用逆波兰式计算工资的方法
Jul 29 PHP
深入讲解PHP Session及如何保持其不过期的方法
Aug 18 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
使用XHProf查找PHP性能瓶颈的实例
Dec 13 PHP
php获取用户真实IP和防刷机制的实例代码
Nov 28 PHP
Yii使用DbTarget实现日志功能的示例代码
Jul 21 #PHP
浅谈PHP之ThinkPHP框架使用详解
Jul 21 #PHP
浅谈php常用的7大框架的优缺点
Jul 20 #PHP
KindEditor在php环境下上传图片功能集成的方法示例
Jul 20 #PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
Jul 19 #PHP
PHP+MySql实现一个简单的留言板
Jul 19 #PHP
PHP8.0新功能之Match表达式的使用
Jul 19 #PHP
You might like
php 获取本机外网/公网IP的代码
2010/05/09 PHP
解决file_get_contents无法请求https连接的方法
2013/12/17 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
2016/08/19 PHP
PHP基本语法实例总结
2016/09/09 PHP
JavaScript 学习笔记(十六) js事件
2010/02/01 Javascript
Jquery截取中文字符串的实现代码
2010/12/22 Javascript
JavaScript中几种排序算法的简单实现
2015/07/29 Javascript
JS实现无限级网页折叠菜单(类似树形菜单)效果代码
2015/09/17 Javascript
JS实现的文字与图片定时切换效果代码
2015/10/06 Javascript
jquery 实时监听输入框值变化的完美方法(必看)
2017/01/26 Javascript
JavaScript中的遍历详解(多种遍历)
2017/04/07 Javascript
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
JS倒计时实例_天时分秒
2017/08/22 Javascript
ES6使用新特性Proxy实现的数据绑定功能实例
2020/05/11 Javascript
Python实现从订阅源下载图片的方法
2015/03/11 Python
Python编程django实现同一个ip十分钟内只能注册一次
2017/11/03 Python
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
2018/01/24 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
python实现音乐下载的统计
2018/06/20 Python
Python3 安装PyQt5及exe打包图文教程
2019/01/08 Python
python列表,字典,元组简单用法示例
2019/07/11 Python
python创建学生成绩管理系统
2019/11/22 Python
Python如何使用Gitlab API实现批量的合并分支
2019/11/27 Python
Python运行DLL文件的方法
2020/01/17 Python
pytorch torchvision.ImageFolder的用法介绍
2020/02/20 Python
Python新手学习raise用法
2020/06/03 Python
Pycharm配置lua编译环境过程图解
2020/11/28 Python
国旗下讲话演讲稿
2014/05/08 职场文书
优秀员工评优方案
2014/06/13 职场文书
人大调研汇报材料
2014/08/14 职场文书
向国旗敬礼活动总结
2014/09/27 职场文书
2015年卫生院健康教育工作总结
2015/07/24 职场文书
python常见的占位符总结及用法
2021/07/02 Python
Win11怎么进入安全模式?Windows 11进入安全模式的方法
2021/11/21 数码科技
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android
JavaScript正则表达式实现注册信息校验功能
2022/05/30 Java/Android