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 相关文章推荐
19个超实用的PHP代码片段
Mar 14 PHP
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
May 07 PHP
ThinkPHP查询返回简单字段数组的方法
Aug 25 PHP
初识laravel5
Mar 02 PHP
JavaScript实现滚动栏效果的方法
Apr 27 PHP
typecho插件编写教程(四):插件挂载
May 28 PHP
PHP实现简单实用的验证码类
Jul 29 PHP
php视频拍照上传头像功能实现代码分享
Oct 08 PHP
php array_slice 取出数组中的一段序列实例
Nov 04 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
Jul 10 PHP
实现PHP中session存储及删除变量
Oct 15 PHP
php apache开启跨域模式过程详解
Jul 08 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中强制下载文件的代码(解决了IE下中文文件名乱码问题)
2011/05/09 PHP
通过curl模拟post和get方式提交的表单类
2014/04/23 PHP
Yii2单元测试用法示例
2016/11/12 PHP
用PHP做了一个领取优惠券活动的示例代码
2019/07/05 PHP
JS方法调用括号的问题探讨
2014/01/24 Javascript
js表单验证实例讲解
2016/03/31 Javascript
js实现按钮控制带有停顿效果的图片滚动
2016/08/30 Javascript
利用jquery禁止外层滚动条的滚动
2017/01/05 Javascript
JS排序之快速排序详解
2017/04/08 Javascript
html5+canvas实现支持触屏的签名插件教程
2017/05/08 Javascript
基于angular2 的 http服务封装的实例代码
2017/06/29 Javascript
swiper自定义分页器使用方法详解
2020/09/14 Javascript
vue+element-ui+ajax实现一个表格的实例
2018/03/09 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
vue中使用iview自定义验证关键词输入框问题及解决方法
2018/03/26 Javascript
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
详解python开发环境搭建
2016/12/16 Python
Python3利用SMTP协议发送E-mail电子邮件的方法
2017/09/30 Python
Django 忘记管理员或忘记管理员密码 重设登录密码的方法
2018/05/30 Python
Win8下python3.5.1安装教程
2020/07/29 Python
不管你的Python报什么错,用这个模块就能正常运行
2018/09/14 Python
Python timeit模块的使用实践
2020/01/13 Python
Python统计学一数据的概括性度量详解
2020/03/03 Python
python+opencv边缘提取与各函数参数解析
2020/03/09 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
2021/01/26 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的示例代码
2021/02/24 HTML / CSS
canvas如何绘制钟表的方法
2017/12/13 HTML / CSS
美国廉价机票预订网站:Cheapfaremart
2018/04/28 全球购物
美国相机和电子产品零售商:Beach Camera
2020/11/26 全球购物
Java servlet面试题
2012/03/04 面试题
员工拾金不昧表扬信
2014/01/09 职场文书
2015届大学生就业推荐表自我评价
2014/09/27 职场文书
天河观后感
2015/06/11 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书
公文写作:新员工转正申请书范本3篇!
2019/08/07 职场文书
蔬果开业典礼发言稿应该怎么写?
2019/09/03 职场文书