|
我们做网站的朋友基本都是有用过统计代码的,比如百度统计,CNZZ,51la等等,在WordPress程序中也有很多统计功能插件,但是只能统计文章阅读数而无法统计访客人数。下面教大家一个自己动手实现PHP+MySQL精确统计网站访问量(IP数量)的方法。
自己动手实现PHP+MySQL精确统计网站访问量(IP数量)
1、创建一个存储数据的表。进入MySQL后直接创建即可。
create table wp_jc_count(
id int not null auto_increment primary key,
ip varchar(20) not null,
times int default 0
);
2、创建一个php脚本。复制到需要显示的地方即可。注意:里面需要修改MySQL的账户和密码。
<?php
class visitorInfo
{
//获取访客ip
public function getIp()
{
$ip=false;
if(!empty($_SERVER["HTTP_CLIENT_IP"])){
$ip = $_SERVER["HTTP_CLIENT_IP"];
}
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }
for ($i = 0; $i < count($ips); $i++) {
if (!eregi ("^(10│172.16│192.168).", $ips[$i])) {
$ip = $ips[$i];
break;
}
}
}
return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
}
//获取网站来源
public function getFromPage(){
return $_SERVER['HTTP_REFERER'];
}
}
$visitor =new visitorInfo();
//连接数据库
$conn=mysqli_connect("localhost","user_naem","password","db_name");
if($conn){
//echo "成功"."<br>";
//echo $_SERVER['REMOTE_ADDR']."<br>";
}else{
echo "失败\n";
die(mysqli_connect_error());
}
//设置数据库编码方式
mysqli_set_charset($conn,"utf8") or die(mysqli_connect_error());
//记录访客的ip地址
$address=$visitor->getIp();
//查询当前访客来访的次数的sql语句
$sql="select times from wp_jc_count where ip='$address'";
//查询结果存到$result变量
$result=mysqli_query($conn,$sql) or die(mysqli_connect_error());
if(!$row=$result->fetch_row()){
$sql="insert into wp_jc_count(ip, times) values('$address','1')";
}else{
$times=$row['0']+1;
$sql="update wp_jc_count set times='$times' where ip ='$address'";
}
$result=mysqli_query($conn,$sql) or die(mysqli_connect_error());
//获取总的访问人数即数据表中所有ip的数量
$sql="select count(ip) from wp_jc_count";
$result=mysqli_query($conn,$sql) or die(mysqli_connect_error());
if($row=$result->fetch_row()){
$num=$row[0];
}
echo "您是第".$num."位访客";
mysqli_close($conn);
?>
把代码放在了文本工具里面执行查看是否可以正常运行。
WordPress自带有两个小工具可以执行代码功能。一个是自定义HTML小工具,不过只能运行HTML、CSS、JavaScript三种语言。文本小工具默认是不可以运行代码的。要实现这个功能,需要添加以下代码。
使用方法:在当前主题目录下面的functions.php里面加入以下代码,注意,如果现在有使用文本工具请删除,添加完代码再使用工具。否则代码不起作用.
add_filter('widget_text', 'php_text', 99);
function php_text($text) {
if (strpos($text, '<' . '?') !== false) {
ob_start();
eval('?' . '>' . $text);
$text = ob_get_contents();
ob_end_clean();
}
return $text;
}
添加完代码以后,可以去测试文本工具,发现已经可以运行PHP代码了。
全部代码展示:
<?php
class visitorInfo
{
//获取访客ip
public function getIp()
{
$ip=false;
if(!empty($_SERVER["HTTP_CLIENT_IP"])){
$ip = $_SERVER["HTTP_CLIENT_IP"];
}
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }
for ($i = 0; $i < count($ips); $i++) {
if (!eregi ("^(10│172.16│192.168).", $ips[$i])) {
$ip = $ips[$i];
break;
}
}
}
return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
}
//获取网站来源
public function getFromPage(){
return $_SERVER['HTTP_REFERER'];
}
}
$visitor =new visitorInfo();
//连接数据库
$conn=mysqli_connect("localhost","user_naem","password","db_name");
if($conn){
//echo "成功"."<br>";
//echo $_SERVER['REMOTE_ADDR']."<br>";
}else{
echo "失败\n";
die(mysqli_connect_error());
}
//设置数据库编码方式
mysqli_set_charset($conn,"utf8") or die(mysqli_connect_error());
//记录访客的ip地址
$address=$visitor->getIp();
//查询当前访客来访的次数的sql语句
$sql="select times from wp_jc_count where ip='$address'";
//查询结果存到$result变量
$result=mysqli_query($conn,$sql) or die(mysqli_connect_error());
if(!$row=$result->fetch_row()){
$sql="insert into wp_jc_count(ip, times) values('$address','1')";
}else{
$times=$row['0']+1;
$sql="update wp_jc_count set times='$times' where ip ='$address'";
}
$result=mysqli_query($conn,$sql) or die(mysqli_connect_error());
//获取总的访问人数即数据表中所有ip的数量
$sql="select count(ip) from wp_jc_count";
$result=mysqli_query($conn,$sql) or die(mysqli_connect_error());
if($row=$result->fetch_row()){
$num=$row[0];
}
mysqli_close($conn);
?>
<table>
<tr style="text-align:center;font-size:18px; font-family:黑体;">
<td style="width:100%;text-align:center;"> 博客总访问量:<a style="colorodgerBlue;"><?php echo $num;?></a> 人(IP数量)</td>
</tr>
</table>
以下代码可以实现获取来访用户的IP地址,一个IP对应一次访问。即使刷新也不会增加访问量。这个非常精确。
|
|