收集整理的php访客统计代码

最简单的方法便是使用平台的统计功能,比如cnzz,百度统计等等平台,但这篇文章的重点是自己写代码实现统计功能 

一、文件方式简单统计

用php实现一个简单的访客统计功能,统计网站的总访问量是多少,简单实用。php通过每次打开文本文件,获取文本中的数字,进行加1再写入到文本中。所以只要每次有访问就会进行累加pv数量来实现的简单访客次数的统计。

  1. <?php
  2. if(!file_exists("count.txt")){
  3. $one_file=fopen("count.txt","w+"); //建立一个统计文本,如果不存在就创建
  4. echo"您是第<font color='red'><b>1</b></font>位访客"; //首次直接输出第一次
  5. fwrite("count.txt","1"); //把数字1写入文本
  6. fclose("$one_file");
  7. }else{ //如果不是第一次访问直接读取内容,并+1,写入更新后再显示新的访客数
  8. $num=file_get_contents("count.txt");
  9. $num++;
  10. file_put_contents("count.txt","$num");
  11. $newnum=);
  12. $newnum=file_get_contents("count.txt");
  13. echo"您是第<font color='red'><b>".$newnum."</b></font>位访客";
  14. setcookie("access",1, time()+3600*24);//访问过标记
  15. }
  16. }
  17. ?>

二、获取详细信息统计

在网站的一个公共文件中,进行每次访问时获取用户的ip、浏览器类型、系统类型、访问时间、访问当前地址、访问来源、ip对属地信息的统计。通过这些信息就能大致知道哪个地方访问人数最大、哪篇文章访问人数最大、今日访问人数、pv、恶意访问ip等信息就都出来了。

1.数据库表结构:

  1. CREATE TABLE `visitors` (
  2. `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
  3. `ip` char(30) DEFAULT NULL COMMENT 'ip地址',
  4. `froms` char(100) DEFAULT NULL COMMENT '归属地',
  5. `add_time` datetime NOT NULL COMMENT '添加时间',
  6. `system` char(60) DEFAULT NULL COMMENT '操作系统',
  7. `browser` char(200) DEFAULT NULL COMMENT '浏览器',
  8. `pageview` char(200) DEFAULT NULL COMMENT '受访页面',
  9. `source_link` varchar(1000) DEFAULT NULL COMMENT '来源链接',
  10. PRIMARY KEY (`id`),
  11. KEY `ip` (`ip`),
  12. KEY `add_time` (`add_time`)
  13. ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='访客表';

2.php统计代码

在一个公共php文件中放置获取信息代码,并写入到数据库中。

  1. //获取访客信息
  2. //pdo连接数据库
  3. $db_ms='mysql';
  4. $db_host='127.0.0.1';
  5. $db_user='root';
  6. $db_pass='123456';
  7. $db_name='test';
  8. $dbh=$db_ms.':host='.$db_host.';'.'dbname='.$db_name;
  9. try{
  10. $dbh = new PDO($dbh,$db_user,$db_pass);
  11. //echo '连接成功';
  12. $dbh -> query('set names utf8');
  13. }catch(PDOException $e){
  14. die('error:'.$e->getMessage());
  15. }
  16. function visitor(){
  17. global $dbh;
  18. #当前url
  19. $url=$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
  20. #获取ip和来源
  21. $address = GetIpFrom();
  22. $froms = $address[0];
  23. $ip = $address[1];
  24. #获取浏览器和系统类型
  25. $broswer = get_broswer();
  26. $os = get_os();
  27. #获取最后来源地址
  28. if(empty($_SERVER['HTTP_REFERER'])){
  29. $source_link = $url;
  30. }else{
  31. $source_link = $_SERVER['HTTP_REFERER'];
  32. }
  33. #限制ip访问次数
  34. $sqlco = "select count(id) as num FROM visitors where ip ="."'".$ip."'"." AND add_time>="."'".date('Y-m-d',time())."'";
  35. $cres = $dbh -> query($sqlco);
  36. $vnum = $cres -> fetch();
  37. if($vnum['num']>10000){
  38. exit('Sorry... You visited the number more than 10000 times today, and the access denied!');
  39. }
  40. #获取到的信息放入数据库
  41. $sql =" INSERT INTO visitors (ip,froms,add_time,system,browser,pageview,source_link) VALUES ('$ip','$froms',now(),'$os','$broswer','$url','$source_link')";
  42. $dbh -> exec($sql);
  43. }

浏览器信息和ip信息获取函数

  1. //获取浏览器信息
  2. function get_broswer(){
  3. $sys = $_SERVER['HTTP_USER_AGENT']; //获取用户代理字符串
  4. if (stripos($sys, "Firefox/") > 0) {
  5. preg_match("/Firefox\/([^;)]+)+/i", $sys, $b);
  6. $exp[0] = "Firefox";
  7. $exp[1] = $b[1]; //获取火狐浏览器的版本号
  8. } elseif (stripos($sys, "Maxthon") > 0) {
  9. preg_match("/Maxthon\/([\d\.]+)/", $sys, $aoyou);
  10. $exp[0] = "傲游";
  11. $exp[1] = $aoyou[1];
  12. } elseif (stripos($sys, "Baiduspider") > 0) {
  13. $exp[0] = "百度";
  14. $exp[1] = '蜘蛛';
  15. }elseif (stripos($sys, "YisouSpider") > 0) {
  16. $exp[0] = "一搜";
  17. $exp[1] = '蜘蛛';
  18. }elseif (stripos($sys, "Googlebot") > 0) {
  19. $exp[0] = "谷歌";
  20. $exp[1] = '蜘蛛';
  21. }elseif (stripos($sys, "Android 4.3") > 0) {
  22. $exp[0] = "安卓";
  23. $exp[1] = '4.3';
  24. }
  25. elseif (stripos($sys, "MSIE") > 0) {
  26. preg_match("/MSIE\s+([^;)]+)+/i", $sys, $ie);
  27. $exp[0] = "IE";
  28. $exp[1] = $ie[1]; //获取IE的版本号
  29. } elseif (stripos($sys, "OPR") > 0) {
  30. preg_match("/OPR\/([\d\.]+)/", $sys, $opera);
  31. $exp[0] = "Opera";
  32. $exp[1] = $opera[1];
  33. } elseif(stripos($sys, "Edge") > 0) {
  34. //win10 Edge浏览器 添加了chrome内核标记 在判断Chrome之前匹配
  35. preg_match("/Edge\/([\d\.]+)/", $sys, $Edge);
  36. $exp[0] = "Edge";
  37. $exp[1] = $Edge[1];
  38. } elseif (stripos($sys, "Chrome") > 0) {
  39. preg_match("/Chrome\/([\d\.]+)/", $sys, $google);
  40. $exp[0] = "Chrome";
  41. $exp[1] = $google[1]; //获取google chrome的版本号
  42. } elseif(stripos($sys,'rv:')>0 && stripos($sys,'Gecko')>0){
  43. preg_match("/rv:([\d\.]+)/", $sys, $IE);
  44. $exp[0] = "IE";
  45. $exp[1] = $IE[1];
  46. }else if(stripos($sys,'AhrefsBot')>0){
  47. $exp[0] = "AhrefsBot";
  48. $exp[1] = '蜘蛛';
  49. }else if(stripos($sys,'Safari')>0){
  50. preg_match("/([\d\.]+)/", $sys, $safari);
  51. $exp[0] = "Safari";
  52. $exp[1] = $safari[1];
  53. }else if(stripos($sys,'bingbot')>0){
  54. $exp[0] = "必应";
  55. $exp[1] = '蜘蛛';
  56. }else if(stripos($sys,'WinHttp')>0){
  57. $exp[0] = "windows";
  58. $exp[1] = 'WinHttp 请求接口工具';
  59. }else if(stripos($sys,'iPhone OS 10')>0){
  60. $exp[0] = "iPhone";
  61. $exp[1] = 'OS 10';
  62. }else if(stripos($sys,'Sogou')>0){
  63. $exp[0] = "搜狗";
  64. $exp[1] = '蜘蛛';
  65. }else if(stripos($sys,'HUAWEIM')>0){
  66. $exp[0] = "华为";
  67. $exp[1] = '手机端';
  68. }else if(stripos($sys,'Dalvik')>0){
  69. $exp[0] = "安卓";
  70. $exp[1] = 'Dalvik虚拟机';
  71. }else if(stripos($sys,'Mac OS X 10')>0){
  72. $exp[0] = "MAC";
  73. $exp[1] = 'OS X10';
  74. }else if(stripos($sys,'Opera/9.8')>0){
  75. $exp[0] = "Opera";
  76. $exp[1] = '9.8';
  77. }else if(stripos($sys,'JikeSpider')>0){
  78. $exp[0] = "即刻";
  79. $exp[1] = '蜘蛛';
  80. }else if(stripos($sys,'Baiduspider')>0){
  81. $exp[0] <(preg_match('/win/i', $agent) && strpos($agent, '95'))
  82. {
  83. $os = 'Windows 95';
  84. }
  85. else if (preg_match('/win 9x/i', $agent) && strpos($agent, '4.90'))
  86. {
  87. $os = 'Windows ME';
  88. }
  89. else if (preg_match('/win/i', $agent) && preg_match('/98/i', $agent))
  90. {
  91. $os = 'Windows 98';
  92. }
  93. else if (preg_match('/win/i', $agent) && preg_match('/nt 6.0/i', $agent))
  94. {
  95. $os = 'Windows Vista';
  96. }
  97. else if (preg_match('/win/i', $agent) && preg_match('/nt 6.1/i', $agent))
  98. {
  99. $os = 'Windows 7';
  100. }
  101. else if (preg_match('/win/i', $agent) && preg_match('/nt 6.2/i', $agent))
  102. {
  103. $os = 'Windows 8';
  104. }else if(preg_match('/win/i', $agent) && preg_match('/nt 10.0/i', $agent))
  105. {
  106. $os = 'Windows 10';#添加win10判断
  107. }else if (preg_match('/win/i', $agent) && preg_match('/nt 5.1/i', $agent))
  108. {
  109. $os = 'Windows XP';
  110. }
  111. else if (preg_match('/win/i', $agent) && preg_match('/nt 5/i', $agent))
  112. {
  113. $os = 'Windows 2000';
  114. }
  115. else if (preg_match('/win/i', $agent) && preg_match('/nt/i', $agent))
  116. {
  117. $os = 'Windows NT';
  118. }
  119. else if (preg_match('/win/i', $agent) && preg_match('/32/i', $agent))
  120. {
  121. $os = 'Windows 32';
  122. }
  123. else if (preg_match('/linux/i', $agent))
  124. {
  125. $os = 'Linux';
  126. }
  127. else if (preg_match('/unix/i', $agent))
  128. {
  129. $os = 'Unix';
  130. }
  131. else if (preg_match('/sun/i', $agent) && preg_match('/os/i', $agent))
  132. {
  133. $os = 'SunOS';
  134. }
  135. else if (preg_match('/ibm/i', $agent) && preg_match('/os/i', $agent))
  136. {
  137. $os = 'IBM OS/2';
  138. }
  139. else if (preg_match('/Mac/i', $agent) && preg_match('/PC/i', $agent))
  140. {
  141. $os = 'Macintosh';
  142. }
  143. else if (preg_match('/PowerPC/i', $agent))
  144. {
  145. $os = 'PowerPC';
  146. }
  147. else if (preg_match('/AIX/i', $agent))
  148. {
  149. $os = 'AIX';
  150. }
  151. else if (preg_match('/HPUX/i', $agent))
  152. {
  153. $os = 'HPUX';
  154. }
  155. else if (preg_match('/NetBSD/i', $agent))
  156. {
  157. $os = 'NetBSD';
  158. }
  159. else if (preg_match('/BSD/i', $agent))
  160. {
  161. $os = 'BSD';
  162. }
  163. else if (preg_match('/OSF1/i', $agent))
  164. {
  165. $os = 'OSF1';
  166. }
  167. else if (preg_match('/IRIX/i', $agent))
  168. {
  169. $os = 'IRIX';
  170. }
  171. else if (preg_match('/FreeBSD/i', $agent))
  172. {
  173. $os = 'FreeBSD';
  174. }
  175. else if (preg_match('/teleport/i', $agent))
  176. {
  177. $os = 'teleport';
  178. }
  179. else if (preg_match('/flashget/i', $agent))
  180. {
  181. $os = 'flashget';
  182. }
  183. else if (preg_match('/webzip/i', $agent))
  184. {
  185. $os = 'webzip';
  186. }
  187. else if (preg_match('/offline/i', $agent))
  188. {
  189. $os = 'offline';
  190. }else if (preg_match('/iPhone OS 8/i', $agent))
  191. {
  192. $os = 'iOS 8';
  193. }else if (preg_match('/YisouSpider/i', $agent))
  194. {
  195. $os = '一搜引擎';
  196. }else if (preg_match('/Yahoo! Slurp/i', $agent))
  197. {
  198. $os = '雅虎引擎';
  199. }else if (preg_match('/iPhone OS 6/i', $agent))
  200. {
  201. $os = 'iOS 6';
  202. }
  203. else if (preg_match('/Baiduspider/i', $agent))
  204. {
  205. $os = '百度引擎';
  206. }else if (preg_match('/iPhone OS 10/i', $agent))
  207. {
  208. $os = 'iOS 10';
  209. }else if (preg_match('/Mac OS X 10/i', $agent))
  210. {
  211. $os = 'Mac OS 10';
  212. }
  213. else if (preg_match('/Ahrefs/i', $agent))
  214. {
  215. $os = 'Ahrefs SEO 引擎';
  216. }
  217. else if (preg_match('/JikeSpider/i', $agent))
  218. {
  219. $os = '即刻引擎';
  220. }else if (preg_match('/Googlebot/i', $agent))
  221. {
  222. $os = '谷歌引擎';
  223. }else if(preg_match('/bingbot/i',$agent)){
  224. $os = '必应引擎';
  225. }else if(preg_match('/iPhone OS 7/i',$agent)){
  226. $os = 'iOS 7';
  227. }else if(preg_match('/Sogou web spider/i',$agent)){as $ip){
  228. $ip = trim($ip);
  229. if ($ip != 'unknown'){
  230. $realip = $ip;
  231. break;
  232. }
  233. }
  234. }else if(isset($_SERVER['HTTP_CLIENT_IP']) && !empty($_SERVER['HTTP_CLIENT_IP']) && strcasecmp($_SERVER['HTTP_CLIENT_IP'], $unknown)){
  235. $realip = $_SERVER[ }
  236. }else{
  237. if(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), $unknown)){
  238. $realip = getenv("HTTP_X_FORWARDED_FOR");
  239. }else if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), $unknown)){
  240. $realip = getenv("HTTP_CLIENT_IP");
  241. }else if(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), $unknown)){
  242. $realip = getenv("REMOTE_ADDR");
  243. }else{
  244. $realip = $unknown;
  245. }
  246. }
  247. $realip = preg_match("/[\d\.]{7,15}/", $realip, $matches) ? $matches[0] : $unknown;
  248. return $realip;
  249. }
  250. function GetIpFrom($ip = ''){
  251. if(empty($ip)){
  252. $ip = GetIps();
  253. }
  254. $res = @file_get_contents('http://ip.taobao.com/service/getIpInfo.php?ip='.$ip);
  255. if($res){
  256. $json = json_decode($res,true);
  257. }else{
  258. $json = '';
  259. }
  260. //var_dump($json);
  261. $address[0] = $json['data']['country'].$json['data']['region'].$json['data']['city'].$json['data']['isp'];
  262. $address[1] = $ip;
  263. return $address;
  264. }

上面的函数可以都放在一个公共的文件中,并调用函数

  1. visitor();

即可。其他统计的功能都通过数据库查询统计出来,如:

  • #查看pv
  • select count(*) as pv from visitors;
  • #查看uv、今日ip
  • select distinct(count(*)) as pv from visitors;
  • ...
免责声明: 本站所有源码都来源于网络收集修改或者交换,只做学习和交流使用,版权归原作者所有,若为付费资源,请在下载后24小时之内自觉删除,若作商业用途,请到原网站购买,由于未及时购买和付费发生的侵权行为,与本站无关。本站发布的内容如果侵犯了您的权益,请及时告知我们,我们即刻处理!本站联系邮箱:waxcu6@163.com
吉素材 » 收集整理的php访客统计代码

提供最优质的资源集合

立即查看 了解详情