PHP代码实现在线人数和IP统计
要统计在线人数和IP,可以使用PHP的$_SERVER变量获取客户端的IP地址。首先,创建一个名为`online.php`的文件,然后在其中编写以下代码: ```php <?php // 获取客户端IP地址 $ip = $_SERVER['REMOTE_ADDR']; // 将IP地址存储到文件或数据库中 // 这里我们将其写入一个名为online.txt的文件中 file_put_contents('online.txt', $ip . PHP_EOL, FILE_APPEND); ?> ``` 这段代码将获取客户端的IP地址,并将其追加到名为`online.txt`的文件中。每次访问此文件时,都会记录一个新的IP地址。要统计在线人数,只需计算该文件中的行数即可。
统计网站访问IP以及在线的人数,推荐使用成熟的统计程序来完成,下面这篇适合局域网或小型dome使用,实现简单小巧的php统计在线人数和IP功能。
首先我们需要开启php依赖putenv()函数模块,找到php.ini文件,搜索putenv关键字,删除即可。
如果你使用的宝塔面板环境,点击左侧软件管理,找到php,然后设置->禁用函数。
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
删除putenv,然后重启php即可。
下面是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<$onlinetimeand$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;?>