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执行速度全攻略(上)
Oct 09 PHP
php 字符过滤类,用于过滤各类用户输入的数据
May 27 PHP
php array_unique之后json_encode需要注意
Jan 02 PHP
探讨php中header的用法详解
Jun 07 PHP
ThinkPHP CURD方法之data方法详解
Jun 18 PHP
PHP缓存集成库phpFastCache用法
Dec 15 PHP
迁移PHP版本到PHP7
Feb 06 PHP
Joomla实现组件中弹出一个模式(modal)窗口的方法
May 04 PHP
PHP 数组基本操作方法详解
Jun 17 PHP
Yii视图操作之自定义分页实现方法
Jul 14 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
Feb 21 PHP
Thinkphp5框架中引入Markdown编辑器操作示例
Jun 03 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入门教程 精简版
2009/12/13 PHP
《PHP编程最快明白》第七讲:php图片验证码与缩略图
2010/11/01 PHP
PHPwind整合最土系统用户同步登录实现方法
2010/12/08 PHP
php设计模式 Command(命令模式)
2011/06/26 PHP
Yii框架实现记录日志到自定义文件的方法
2017/05/23 PHP
thinkPHP+phpexcel实现excel报表输出功能示例
2017/06/06 PHP
浅谈PHP中的面向对象OOP中的魔术方法
2017/06/12 PHP
PHP字符串和十六进制如何实现互相转换
2020/07/16 PHP
如何简单地用YUI做JavaScript动画
2007/03/10 Javascript
jQeury淡入淡出需要注意的问题
2010/09/08 Javascript
ASP.NET jQuery 实例3 (在TextBox里面阻止复制、剪切和粘贴事件)
2012/01/13 Javascript
JS操作Cookies包括(读取添加与删除)
2012/12/26 Javascript
用Jquery.load载入页面后样式没了页面混乱的解决方法
2014/10/20 Javascript
js实现点击切换checkbox背景图片的简单实例
2017/05/08 Javascript
javascript、php关键字搜索函数的使用方法
2018/05/29 Javascript
浅谈Vue.js 关于页面加载完成后执行一个方法的问题
2019/04/01 Javascript
模块化react-router配置方法详解
2019/06/03 Javascript
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
如何构建一个Vue插件并生成npm包
2020/10/26 Javascript
windows如何把已安装的nodejs高版本降级为低版本(图文教程)
2020/12/14 NodeJs
python删除指定类型(或非指定)的文件实例详解
2015/07/06 Python
python 打印对象的所有属性值的方法
2016/09/11 Python
Python中Django发送带图片和附件的邮件
2017/03/31 Python
python爬取淘宝商品详情页数据
2018/02/23 Python
python统计字母、空格、数字等字符个数的实例
2018/06/29 Python
详解Python 4.0 预计推出的新功能
2019/07/26 Python
Python3.9.1中使用split()的处理方法(推荐)
2021/02/07 Python
台湾专柜女包:KINAZ
2019/12/26 全球购物
联谊会主持词
2014/03/26 职场文书
二年级评语大全
2014/04/23 职场文书
竞选卫生委员演讲稿
2014/04/28 职场文书
出生公证书
2015/01/23 职场文书
自主招生英文自荐信
2015/03/25 职场文书
寒假致家长的一封信
2015/10/10 职场文书
导游词之永泰公主墓
2019/12/04 职场文书
学会用Python实现滑雪小游戏,再也不用去北海道啦
2021/05/20 Python