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

2020-10-08 0 184

写在前面的话

很多人有这样的需求,就是统计网站访问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(\"&nbsp;\");\";
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实现统计IP数及在线人数的示例代码 http://www.ox520.com/22557.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务