2

自己动手实现PHP+MySQL精确统计网站访问量(IP数量)

 2 years ago
source link: https://www.huhexian.com/12232.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

自己动手实现PHP+MySQL精确统计网站访问量(IP数量)

青山 2021-11-1914:04:05评论3743字

我们做网站的朋友基本都是有用过统计代码的,比如百度统计,CNZZ,51la等等,在WordPress程序中也有很多统计功能插件,但是只能统计文章阅读数而无法统计访客人数。下面教大家一个自己动手实现PHP+MySQL精确统计网站访问量(IP数量)的方法。

1、创建一个存储数据的表。进入MySQL后直接创建即可。

  1. create table wp_jc_count(
  2. id int not null auto_increment primary key,
  3. ip varchar(20) not null,
  4. times int default 0

2、创建一个php脚本。复制到需要显示的地方即可。注意:里面需要修改MySQL的账户和密码。

  1. <?php
  2. class visitorInfo
  3. //获取访客ip
  4. public function getIp()
  5. $ip=false;
  6. if(!empty($_SERVER["HTTP_CLIENT_IP"])){
  7. $ip = $_SERVER["HTTP_CLIENT_IP"];
  8. if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  9. $ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
  10. if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }
  11. for ($i = 0; $i < count($ips); $i++) {
  12. if (!eregi ("^(10│172.16│192.168).", $ips[$i])) {
  13. $ip = $ips[$i];
  14. break;
  15. return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
  16. //获取网站来源
  17. public function getFromPage(){
  18. return $_SERVER['HTTP_REFERER'];
  19. $visitor =new visitorInfo();
  20. //连接数据库
  21. $conn=mysqli_connect("localhost","user_naem","password","db_name");
  22. if($conn){
  23. //echo "成功"."<br>";
  24. //echo $_SERVER['REMOTE_ADDR']."<br>";
  25. }else{
  26. echo "失败\n";
  27. die(mysqli_connect_error());
  28. //设置数据库编码方式
  29. mysqli_set_charset($conn,"utf8") or die(mysqli_connect_error());
  30. //记录访客的ip地址
  31. $address=$visitor->getIp();
  32. //查询当前访客来访的次数的sql语句
  33. $sql="select times from wp_jc_count where ip='$address'";
  34. //查询结果存到$result变量
  35. $result=mysqli_query($conn,$sql) or die(mysqli_connect_error());
  36. if(!$row=$result->fetch_row()){
  37. $sql="insert into wp_jc_count(ip, times) values('$address','1')";
  38. }else{
  39. $times=$row['0']+1;
  40. $sql="update wp_jc_count set times='$times' where ip ='$address'";
  41. $result=mysqli_query($conn,$sql) or die(mysqli_connect_error());
  42. //获取总的访问人数即数据表中所有ip的数量
  43. $sql="select count(ip) from wp_jc_count";
  44. $result=mysqli_query($conn,$sql) or die(mysqli_connect_error());
  45. if($row=$result->fetch_row()){
  46. $num=$row[0];
  47. echo "您是第".$num."位访客";
  48. mysqli_close($conn);
  49. ?>

把代码放在了文本工具里面执行查看是否可以正常运行。

WordPress自带有两个小工具可以执行代码功能。一个是自定义HTML小工具,不过只能运行HTML、CSS、JavaScript三种语言。文本小工具默认是不可以运行代码的。要实现这个功能,需要添加以下代码。

使用方法:在当前主题目录下面的functions.php里面加入以下代码,注意,如果现在有使用文本工具请删除,添加完代码再使用工具。否则代码不起作用.

  1. add_filter('widget_text', 'php_text', 99);
  2. function php_text($text) {
  3. if (strpos($text, '<' . '?') !== false) {
  4. ob_start();
  5. eval('?' . '>' . $text);
  6. $text = ob_get_contents();
  7. ob_end_clean();
  8. return $text;

添加完代码以后,可以去测试文本工具,发现已经可以运行PHP代码了。

全部代码展示:

  1. <?php
  2. class visitorInfo
  3. //获取访客ip
  4. public function getIp()
  5. $ip=false;
  6. if(!empty($_SERVER["HTTP_CLIENT_IP"])){
  7. $ip = $_SERVER["HTTP_CLIENT_IP"];
  8. if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
  9. $ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
  10. if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }
  11. for ($i = 0; $i < count($ips); $i++) {
  12. if (!eregi ("^(10│172.16│192.168).", $ips[$i])) {
  13. $ip = $ips[$i];
  14. break;
  15. return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
  16. //获取网站来源
  17. public function getFromPage(){
  18. return $_SERVER['HTTP_REFERER'];
  19. $visitor =new visitorInfo();
  20. //连接数据库
  21. $conn=mysqli_connect("localhost","user_naem","password","db_name");
  22. if($conn){
  23. //echo "成功"."<br>";
  24. //echo $_SERVER['REMOTE_ADDR']."<br>";
  25. }else{
  26. echo "失败\n";
  27. die(mysqli_connect_error());
  28. //设置数据库编码方式
  29. mysqli_set_charset($conn,"utf8") or die(mysqli_connect_error());
  30. //记录访客的ip地址
  31. $address=$visitor->getIp();
  32. //查询当前访客来访的次数的sql语句
  33. $sql="select times from wp_jc_count where ip='$address'";
  34. //查询结果存到$result变量
  35. $result=mysqli_query($conn,$sql) or die(mysqli_connect_error());
  36. if(!$row=$result->fetch_row()){
  37. $sql="insert into wp_jc_count(ip, times) values('$address','1')";
  38. }else{
  39. $times=$row['0']+1;
  40. $sql="update wp_jc_count set times='$times' where ip ='$address'";
  41. $result=mysqli_query($conn,$sql) or die(mysqli_connect_error());
  42. //获取总的访问人数即数据表中所有ip的数量
  43. $sql="select count(ip) from wp_jc_count";
  44. $result=mysqli_query($conn,$sql) or die(mysqli_connect_error());
  45. if($row=$result->fetch_row()){
  46. $num=$row[0];
  47. mysqli_close($conn);
  48. ?>
  49. <table>
  50. <tr style="text-align:center;font-size:18px; font-family:黑体;">
  51. <td style="width:100%;text-align:center;"> 博客总访问量:<a style="color:DodgerBlue;"><?php echo $num;?></a> 人(IP数量)</td>
  52. </tr>
  53. </table>

以下代码可以实现获取来访用户的IP地址,一个IP对应一次访问。即使刷新也不会增加访问量。这个非常精确。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK