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 相关文章推荐
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
Jan 15 PHP
php实现首页链接查询 友情链接检查的代码
Jan 05 PHP
PHP中include()与require()的区别说明
Mar 10 PHP
php printf输出格式使用说明
Dec 05 PHP
7个超级实用的PHP代码片段
Jul 11 PHP
细谈php中SQL注入攻击与XSS攻击
Jun 10 PHP
解析CI的AJAX分页 另类实现方法
Jun 27 PHP
PHP中的Streams详细介绍
Nov 12 PHP
PHP获取数组的键与值方法小结
Jun 13 PHP
php 利用socket发送HTTP请求(GET,POST)
Aug 24 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
Mar 20 PHP
laravel-admin 实现在指定的相册下添加照片
Oct 21 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 文件系统详解
2012/09/13 PHP
php中spl_autoload详解
2014/10/17 PHP
php实现的简单日志写入函数
2015/03/31 PHP
WordPress中限制非管理员用户在文章后只能评论一次
2015/12/31 PHP
PHP实现的限制IP投票程序IP来源分析
2016/05/04 PHP
js日历功能对象
2012/01/12 Javascript
javascript中强制执行toString()具体实现
2013/04/27 Javascript
使用GruntJS链接与压缩多个JavaScript文件过程详解
2013/08/02 Javascript
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
js显示文本框提示文字的方法
2015/05/07 Javascript
jQuery插件简单学习实例教程
2016/07/01 Javascript
浅谈angularjs module返回对象的坑(推荐)
2016/10/21 Javascript
Node.js制作简单聊天室
2017/01/12 Javascript
javascript实现圣旨卷轴展开效果(代码分享)
2017/03/23 Javascript
详解Vue.js 2.0 如何使用axios
2017/04/21 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
2017/06/13 Javascript
用Axios Element实现全局的请求loading的方法
2018/03/15 Javascript
Windows上node.js的多版本管理工具用法实例分析
2019/11/06 Javascript
js实现单元格拖拽效果
2020/02/10 Javascript
JavaScript canvas基于数组生成柱状图代码实例
2020/03/06 Javascript
es6函数之尾递归用法实例分析
2020/04/25 Javascript
js实现右键弹出自定义菜单
2020/09/08 Javascript
[00:29]2019完美世界全国高校联赛(秋季赛)总决赛海口落幕
2019/12/10 DOTA
python实现计算倒数的方法
2015/07/11 Python
pyqt5 实现工具栏文字图片同时显示
2019/06/13 Python
树莓派实现移动拍照
2019/06/22 Python
python爬虫之自制英汉字典
2019/06/24 Python
flask/django 动态查询表结构相同表名不同数据的Model实现方法
2019/08/29 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
Python如何使用vars返回对象的属性列表
2020/10/17 Python
用 python 进行微信好友信息分析
2020/11/28 Python
手工制作的意大利礼服鞋:Ace Marks
2018/12/15 全球购物
高考备战决心书
2014/03/11 职场文书
毕业生简历自我评价范文
2014/04/09 职场文书
关于读书的演讲稿1000字
2014/08/27 职场文书
python 学习GCN图卷积神经网络
2022/05/11 Python