|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
你发奋努力,熟悉了安全方面的问题,然后又设计了一些程序,感觉还不错。web|web办事|web办事器|法式 大多半网站托管(Web hosting)公司都撑持客户对Web站点统计数据的会见,然而你常常会感觉办事器所发生的形态信息不敷周全。例如,设置装备摆设不准确的Web办事器不克不及辨认某些文件类型,这些类型的文件就不会呈现在形态信息当中。幸亏,你可以用PHP来定制形态信息搜集法式,如许你就能够获得你所需求的信息了。
公共日记文件格局(Common Logfile Format,CLF)的布局
CLF最后是NCSA为HTTPd(全球网办事器软件)而设计的。CERN HTTPd是一个由万维网同盟(World Wide Web Consortium,W3C)保护的公共域Web办事器。W3C网站列出了该日记文件标准。基于微软和UNIX的Web办事器都可以生成CLF格局的日记文件。CLF格局以下:
Host IdentAuthuserTime_Stamp "request" Status_codeFile_size
例如:
21.53.48.83 - - [22/Apr/2002:22:19:12 -0500] "GET /cnet.gif HTTP/1.0" 200 8237
上面是日记条目标详目分类:
Host是网站会见者的IP地址或DNS名;在下面的例子中,它是21.53.48.83。
Ident是该访客的远端身份(RFC 931)。破折号标明“未指定”。
Authuser是用户ID(假如Web办事器已验证了验证网站会见者的身份的话)。
Time_Stam是办事器以“日/月/年”这类格局前往的工夫。
Request是网站会见者的HTTP恳求,例如GET或POST。
Status_Code是办事器所前往的形态代码,例如:200代表“准确??阅读器恳求胜利”。
File_Size是用户所恳求文件的巨细。在本例中,它为 8237字节。
办事器形态代码
你可以在HTTP尺度中找到W3C所开辟的办事器形态代码标准。这些由办事器所发生的形态代码暗示了阅读器和办事器之间的数据传输胜利与否。这些代码普通传递给阅读器(例如十分着名的404毛病“页面没有找到“)或添加到办事器日记中去。
搜集数据
创立咱们的自界说使用法式的第一步就是获得用户数据。每当用户选择网站的某个资本时,咱们就但愿创立一个对应的日记条目。幸亏,办事器变量的存在使得咱们可以查询用户阅读器并获得数据。
报头中的办事器变量携带了从阅读器传递到办事器的信息。REMOTE_ADDR就是一个办事器变量的例子。这个变量前往了用户的IP地址:
例子输入:27.234.125.222
上面的PHP代码将显示出以后用户的IP地址:
<?php echo $_SERVER['REMOTE_ADDR']; ?>
让咱们看看咱们的PHP使用法式的代码。起首,咱们需求界说咱们想跟踪的网站资本并指定文件巨细:
//获得咱们想纪录的文件称号
$fileName="cnet-banner.gif";
$fileSize="92292";
你无需把这些值保留到静态变量中去。假如你要跟踪很多条目,那末你可以把它们保留到数组或数据库中去。在这类情形下,你能够会但愿经由过程一个内部链接来找到每一个条目,以下所示:
<a href="weblogger.php?bannerid=123"><imgsrc="cnet-banner.gif" border="0"></a>
个中“123”暗示“cnet-banner.gif”所对应的纪录。然后,咱们经由过程办事器变量来查询用户阅读器。如许咱们就失掉在咱们的日记文件中添加新条目所需的数据:
//失掉网站阅读者的CLF信息
$host=$_SERVER['REMOTE_ADDR'];
$ident=$_SERVER['REMOTE_IDENT'];
$auth=$_SERVER['REMOTE_USER'];
$timeStamp=date("d/M/Y:H:i:s O");
$reqType=$_SERVER['REQUEST_METHOD'];
$servProtocol=$_SERVER['SERVER_PROTOCOL'];
$statusCode="200";
然后,咱们反省办事器是不是前往了空值(null)。依据CLF标准,空值应当用破折号来取代。如许,下一个代码块的义务就是寻觅空值并用破折号来代替它:
//给空值添加破折号(依据标准)
if ($host==""){ $host="-"; }
if ($ident==""){ $ident="-"; }
if ($auth==""){ $auth="-"; }
if ($reqType==""){ $reqType="-"; }
if ($servProtocol==""){ $servProtocol="-"; }
一旦咱们获得了需要的信息,这些值将被组织成一种合适CLF标准的格局:
//创立CLF格局的字符串
$clfString=$host." ".$ident." ".$auth." [".$timeStamp."] "".$reqType." /".$fileName." ".$servProtocol."" ".$statusCode." ".$fileSize." ";
创立自界说日记文件
如今,格局化以后的数据可以寄存到咱们的自界说日记文件中去。起首,咱们将创立一种文件定名协议,并编写逐日发生一个新日记文件的办法(函数)。在本文所举的例子中,每一个文件都以“weblog-”开首,然后是按月/日/年暗示的日期,文件扩大名为.log。.log扩大名普通暗示办事器日记文件。(实践上,绝大多半日记剖析器都搜刮.log文件。)
// 用以后日期来定名日记文件
$logPath="./log/";
$logFile=$logPath."weblog-".date("mdy").".log";
如今,咱们需求判别以后日记文件是不是存在。假如存在,咱们就向它添加条目;不然,使用法式就创立新的日记文件。(新日记文件的创立普通产生在日期更改时,由于这时候文件名产生变更了。)
//反省日记文件是不是已存在
if (file_exists($logFile)){
//假如存在,则翻开已存在的日记文件
$fileWrite = fopen($logFile,"a");}
else {
//不然,创立新的日记文件
$fileWrite = fopen($logFile,"w"); }
假如你在写或追加文件时,收到“权限缺乏(Permission Denied)”毛病信息,请更改方针日记文件夹的权限来答应写操作。绝大多半Web办事器的默许权限为“可读可履行”。你可以用CHMOD号令或利用FTP客户端来改动文件夹的权限。
然后,咱们创立文件锁定机制,如许当两个或更多用户同时会见日记文件时,只要个中的一个用户可以对该文件停止写操作:
//创立文件写操作的锁定机制
flock($fileWrite, LOCK_SH);
最初,咱们写入条目标内容:
//写CLF条目
fwrite($fileWrite,$clfString);
//消除文件锁定形态
flock($fileWrite, LOCK_UN);
//封闭日记文件
fclose($fileWrite);
处置日记数据
在该体系产物化以后,客户但愿失掉对所搜集到的会见者数据的具体统计剖析。因为一切的定制日记文件都是依照一个尺度的格局组织的,因而任何一个日记剖析器都可以处置它们。日记剖析器是一个东西,它剖析大的日记文件并发生饼图、直方图和其它统计图形。日记剖析器也用来搜集数据,并综合出供应哪些用户会见你的网站、点击数等方面的信息。
上面列出了几个对照盛行的日记剖析器:
WebTrends是一个十分不错的日记剖析器,它合用于大范围网站和企业级的收集。
Analog是一个颇受接待的收费日记剖析器。
Webalizer是一个收费的剖析法式。它可以发生HTML呈报,如许大多半收集阅读器都可以检查它的呈报。
恪守尺度
咱们可以轻松的扩大该使用法式来让它撑持其它类型的日记纪录。如许你就能够捕捉到更多的数据,如阅读器类型和referrer(referrer指得是链接到以后网页的前一个网页)。这里的经历就是:在你编程的时分遵守尺度或常规毕竟会简化任务。
即使你理解不了PHP,但是也必须先跟它混个脸熟,看,一遍遍的看,看的同时一边琢磨,一边按照它所教的打代码,即使你搞不清楚那些代码到底是干嘛的,但是起码你应该找找感觉。 |
|