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 相关文章推荐
第十五节--Zend引擎的发展
Nov 16 PHP
mysq GBKl乱码
Nov 28 PHP
php5编程中的异常处理详细方法介绍
Jul 29 PHP
php过滤html中的其他网站链接的方法(域名白名单功能)
Apr 24 PHP
ThinkPHP的模版中调用session数据的方法
Jul 01 PHP
Yii学习总结之安装配置
Feb 22 PHP
php中实现获取随机数组列表的自定义函数
Apr 02 PHP
[原创]PHP实现逐行删除文件右侧空格的方法
Dec 25 PHP
PHP实现linux命令tail -f
Feb 22 PHP
laravel实现批量更新多条记录的方法示例
Oct 22 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
Nov 28 PHP
PHP实现对图片的反色处理功能【测试可用】
Feb 01 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 服务器调试 Zend Debugger 的安装教程
2009/09/25 PHP
初学PHP的朋友 经常问的一些问题。不断更新
2011/08/11 PHP
浅析php插件 HTMLPurifier HTML解析器
2013/07/01 PHP
怎么在Windows系统中搭建php环境
2013/08/31 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
2014/07/28 PHP
固定网页背景图同时保持图片比例的思路代码
2013/08/15 Javascript
JS事件在IE与FF中的区别详细解析
2013/11/20 Javascript
Jquery对数组的操作技巧整理
2014/03/25 Javascript
js判断子窗体是否关闭的方法
2015/08/11 Javascript
window.location.hash知识汇总
2015/11/09 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
2020/04/20 Javascript
bootstrap fileinput 上传插件的基础使用
2017/02/17 Javascript
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
2018/01/13 Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
2018/02/10 Javascript
vue v-model动态生成详解
2018/06/30 Javascript
Nodejs libuv运行原理详解
2019/08/21 NodeJs
微信小程序文章列表功能完整实例
2020/06/03 Javascript
Python获取远程文件大小的函数代码分享
2014/05/13 Python
Python爬虫模拟登录带验证码网站
2016/01/22 Python
解决pyqt中ui编译成窗体.py中文乱码的问题
2016/12/23 Python
使用Python的Scrapy框架十分钟爬取美女图
2016/12/26 Python
利用Python实现网络测试的脚本分享
2017/05/26 Python
利用Python的sympy包求解一元三次方程示例
2019/11/22 Python
Python字符串格式化f-string多种功能实现
2020/05/07 Python
Python实现列表中非负数保留,负数转化为指定的数值方式
2020/06/04 Python
css3 media 响应式布局的简单实例
2016/08/03 HTML / CSS
HTML5自定义mp3播放器源码
2020/01/06 HTML / CSS
伦敦最著名的老字号百货公司:Selfridges(塞尔福里奇百货)
2016/07/25 全球购物
英国婚礼商城:Wedding Mall
2019/11/02 全球购物
物业管理公司实习生自我鉴定
2013/09/19 职场文书
幼儿师范毕业生自荐信
2013/11/09 职场文书
《青海高原一株柳》教学反思
2014/04/25 职场文书
学校教师读书活动总结
2014/07/08 职场文书
学前班语言教学计划
2015/01/20 职场文书
深入理解python协程
2021/06/15 Python