PHP简单网站访问统计


有时候只想知道网站到底被那些人访问了,包括各种蜘蛛,此时用商用的工具例如百度统计和google analytics似乎看不到.我们需要的功能很简单,感兴趣的数据也只有几个例如useragent,ip,访问了哪个页面等.

设想很简单,在一个公共入口设置一个函数调用,将该次请求的以下信息写到数据库中:用户代理,IP,请求时间,请求的url

先建一个数据库:

drop table `stat`;
CREATE TABLE `stat` (
  `ID` int(11NOT NULL auto_increment,
  `IP` varchar(1000collate utf8_unicode_ci NOT NULL default '',
  `UserAgent` text collate utf8_unicode_ci NOT NULL,
  `RequestTime` datetime default NULL,
  `InsertDate` datetime default NULL,
  `RequestUri` text collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

然后是记录请求信息的代码

function getip(){
   if(getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
   {
     $ip = getenv("HTTP_CLIENT_IP");
   else if(getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")){
     $ip = getenv("HTTP_X_FORWARDED_FOR");
   else if(getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
   {
     $ip = getenv("REMOTE_ADDR");
   else if(isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")){
      $ip $_SERVER['REMOTE_ADDR'];
   }else{
      $ip "unknown";
   }
     return ($ip);
  }


function mystat() {

  $ip = getip();
  $useragent $_SERVER['HTTP_USER_AGENT'];
  $time =  date("Y-m-d H:i:s",$_SERVER['REQUEST_TIME']);
  $requesturi $_SERVER['REQUEST_URI'];
  $sql "insert into stat values('','".$ip."','".$useragent."','".$time."',now(),'".$requesturi."')";
  $d new DSN();
  $d->insertsql($sql);
}

在网站的公共入口调用mystat即可拦截所有的请求.

$pagesize 10;
require_once("class_DSN.php");
require_once("class_REQUEST.php");
require_once("general_functions.php");
mystat();//访问统计
$r new Request();
$d new DSN();
ob_start();

最后用一个简单的脚本显示访问统计:

<?php
if(!isValid()) {} else {
  $sql "select * from stat order by insertdate desc";
  $a $d->querysql($sql);
  echo '<table>';
  foreach($a as $record) {
  ?>
  <tr>
    <td><?php echo $record->IP;?></td>
    <td><?php echo $record->UserAgent;?></td>
    <td><?php echo $record->RequestTime;?></td>
    <td><?php echo $record->InsertDate;?></td>
    <td><?php echo $record->RequestUri;?></td>
  </tr>
  <?php
  }
  echo '</table>';
}
?>

统计结果:

Mediapartners-Google 原来就是Google Adsense的机器人