共计 3251 个字符,预计需要花费 9 分钟才能阅读完成。
原文地址:https://www.wjcms.net/archive…
写在后面的话
很多人有这样的需要,就是统计网站拜访 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,而后设置 -> 禁用函数。
删除 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;
?>
调用
用 JS 调用文件 count.php
在须要退出统计的的中央,增加:
<script src="/php/count.php"></script>
正文完