四虎精品视频-四虎精品成人免费网站-四虎黄色网-四虎国产视频-国产免费91-国产蜜臀97一区二区三区

用定制的PHP應(yīng)用程序來(lái)獲取Web服務(wù)器的狀態(tài)信息

大多數(shù)網(wǎng)站托管(Web hosting)公司都支持客戶對(duì)Web站點(diǎn)統(tǒng)計(jì)數(shù)據(jù)的訪問(wèn),但是你往往會(huì)覺得服務(wù)器所產(chǎn)生的狀態(tài)信息不夠全面。例如,配置不正確的Web服務(wù)器不能識(shí)別某些文件類型,這些類型的文件就不會(huì)出現(xiàn)在狀態(tài)信息之中。幸好,你可以用php來(lái)定制狀態(tài)信息收集程序,這樣你就可以獲取你所需要的信息了。


公共日志文件格式(Common Logfile Format,CLF)的結(jié)構(gòu)

 
CLF最初是NCSA為HTTPd(全球網(wǎng)服務(wù)器軟件)而設(shè)計(jì)的。CERN HTTPd是一個(gè)由萬(wàn)維網(wǎng)聯(lián)盟(World Wide Web Consortium,W3C)維護(hù)的公共域Web服務(wù)器。W3C網(wǎng)站列出了該日志文件規(guī)范。基于微軟和UNIX的Web服務(wù)器都可以生成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

下面是日志條目的細(xì)目分類:

Host是網(wǎng)站訪問(wèn)者的IP地址或者DNS名;在上面的例子中,它是21.53.48.83。
Ident是該訪客的遠(yuǎn)端身份(RFC 931)。破折號(hào)表明“未指定”。
Authuser是用戶ID(如果Web服務(wù)器已經(jīng)驗(yàn)證了驗(yàn)證網(wǎng)站訪問(wèn)者的身份的話)。
Time_Stam是服務(wù)器以“日/月/年”這種格式返回的時(shí)間。
Request是網(wǎng)站訪問(wèn)者的HTTP請(qǐng)求,例如GET或者POST。
Status_Code是服務(wù)器所返回的狀態(tài)代碼,例如:200代表“正確――瀏覽器請(qǐng)求成功”。
File_Size是用戶所請(qǐng)求文件的大小。在本例中,它為 8237字節(jié)。


服務(wù)器狀態(tài)代碼

 
你可以在HTTP標(biāo)準(zhǔn)中找到W3C所開發(fā)的服務(wù)器狀態(tài)代碼規(guī)范。這些由服務(wù)器所產(chǎn)生的狀態(tài)代碼表示了瀏覽器和服務(wù)器之間的數(shù)據(jù)傳輸成功與否。這些代碼一般傳遞給瀏覽器(例如非常有名的404錯(cuò)誤“頁(yè)面沒有找到“)或者添加到服務(wù)器日志中去。


收集數(shù)據(jù)

創(chuàng)建我們的自定義應(yīng)用程序的第一步就是獲取用戶數(shù)據(jù)。每當(dāng)用戶選擇網(wǎng)站的某個(gè)資源時(shí),我們就希望創(chuàng)建一個(gè)對(duì)應(yīng)的日志條目。幸好,服務(wù)器變量的存在使得我們能夠查詢用戶瀏覽器并獲取數(shù)據(jù)。

報(bào)頭中的服務(wù)器變量攜帶了從瀏覽器傳遞到服務(wù)器的信息。REMOTE_ADDR就是一個(gè)服務(wù)器變量的例子。這個(gè)變量返回了用戶的IP地址:
例子輸出:27.234.125.222

下面的php代碼將顯示出當(dāng)前用戶的IP地址:
<?php echo $_SERVER['REMOTE_ADDR']; ?>

讓我們看看我們的php應(yīng)用程序的代碼。首先,我們需要定義我們想跟蹤的網(wǎng)站資源并指定文件大小:
//獲取我們想記錄的文件名稱
$fileName="cNET-banner.gif";
$fileSize="92292";

你無(wú)需把這些值保存到靜態(tài)變量中去。如果你要跟蹤許多條目,那么你可以把它們保存到數(shù)組或者數(shù)據(jù)庫(kù)中去。在這種情況下,你可能會(huì)希望通過(guò)一個(gè)外部鏈接來(lái)找到每個(gè)條目,如下所示:
<a href="weblogger.php?bannerid=123"><imgsrc="cNET-banner.gif" border="0"></a>

其中“123”表示“cNET-banner.gif”所對(duì)應(yīng)的記錄。然后,我們通過(guò)服務(wù)器變量來(lái)查詢用戶瀏覽器。這樣我們就得到在我們的日志文件中添加新條目所需的數(shù)據(jù):
//得到網(wǎng)站瀏覽者的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";

然后,我們檢查服務(wù)器是否返回了空值(null)。根據(jù)CLF規(guī)范,空值應(yīng)該用破折號(hào)來(lái)代替。這樣,下一個(gè)代碼塊的任務(wù)就是尋找空值并用破折號(hào)來(lái)取代它:
//給空值添加破折號(hào)(根據(jù)規(guī)范)
if ($host==""){ $host="-"; }
if ($ident==""){ $ident="-"; }
if ($auth==""){ $auth="-"; }
if ($reqType==""){ $reqType="-"; }
if ($servProtocol==""){ $servProtocol="-"; }

一旦我們獲取了必要的信息,這些值將被組織成一種符合CLF規(guī)范的格式:
//創(chuàng)建CLF格式的字符串
$clfString=$host." ".$ident." ".$auth." [".$timeStamp."] /"".$reqType." /".$fileName." ".$servProtocol."/" ".$statusCode." ".$fileSize."/r/n";

創(chuàng)建自定義日志文件

現(xiàn)在,格式化之后的數(shù)據(jù)可以存放到我們的自定義日志文件中去。首先,我們將創(chuàng)建一種文件命名協(xié)定,并編寫每日產(chǎn)生一個(gè)新日志文件的方法(函數(shù))。在本文所舉的例子中,每個(gè)文件都以“weblog-”開頭,然后是按月/日/年表示的日期,文件擴(kuò)展名為.log。.log擴(kuò)展名一般表示服務(wù)器日志文件。(實(shí)際上,絕大多數(shù)日志分析器都搜索.log文件。)
// 用當(dāng)前日期來(lái)命名日志文件
$logPath="./log/";
$logFile=$logPath."weblog-".date("mdy").".log";

現(xiàn)在,我們需要判斷當(dāng)前日志文件是否存在。如果存在,我們就向它添加條目;否則,應(yīng)用程序就創(chuàng)建新的日志文件。(新日志文件的創(chuàng)建一般發(fā)生在日期更改時(shí),因?yàn)檫@時(shí)文件名發(fā)生變化了。)
//檢查日志文件是否已經(jīng)存在
if (file_exists($logFile)){
//如果存在,則打開已存在的日志文件
$fileWrite = fopen($logFile,"a");}
else {
//否則,創(chuàng)建新的日志文件
$fileWrite = fopen($logFile,"w"); }

如果你在寫或者追加文件時(shí),收到“權(quán)限不足(Permission Denied)”錯(cuò)誤信息,請(qǐng)更改目標(biāo)日志文件夾的權(quán)限來(lái)允許寫操作。絕大多數(shù)Web服務(wù)器的默認(rèn)權(quán)限為“可讀可執(zhí)行”。你可以用CHMOD命令或者使用FTP客戶端來(lái)改變文件夾的權(quán)限。

然后,我們創(chuàng)建文件鎖定機(jī)制,這樣當(dāng)兩個(gè)或者更多用戶同時(shí)訪問(wèn)日志文件時(shí),只有其中的一個(gè)用戶可以對(duì)該文件進(jìn)行寫操作:
//創(chuàng)建文件寫操作的鎖定機(jī)制
flock($fileWrite, LOCK_SH);

最后,我們寫入條目的內(nèi)容:
//寫CLF條目
fwrite($fileWrite,$clfString);
//解除文件鎖定狀態(tài)
flock($fileWrite, LOCK_UN);
//關(guān)閉日志文件
fclose($fileWrite);

處理日志數(shù)據(jù)

 
在該系統(tǒng)產(chǎn)品化之后,客戶希望得到對(duì)所收集到的訪問(wèn)者數(shù)據(jù)的詳細(xì)統(tǒng)計(jì)分析。由于所有的定制日志文件都是按照一個(gè)標(biāo)準(zhǔn)的格式組織的,因此任何一個(gè)日志分析器都可以處理它們。日志分析器是一個(gè)工具,它分析大的日志文件并產(chǎn)生餅圖、直方圖以及其它統(tǒng)計(jì)圖形。日志分析器也用來(lái)收集數(shù)據(jù),并綜合出提供哪些用戶訪問(wèn)你的網(wǎng)站、點(diǎn)擊數(shù)等方面的信息。

下面列出了幾個(gè)比較流行的日志分析器:

WebTrends是一個(gè)非常不錯(cuò)的日志分析器,它適用于大規(guī)模網(wǎng)站以及企業(yè)級(jí)的網(wǎng)絡(luò)。
Analog是一個(gè)頗受歡迎的免費(fèi)日志分析器。
Webalizer是一個(gè)免費(fèi)的分析程序。它可以產(chǎn)生HTML報(bào)告,這樣大多數(shù)網(wǎng)絡(luò)瀏覽器都可以查看它的報(bào)告。

遵守標(biāo)準(zhǔn)

我們可以輕松的擴(kuò)展該應(yīng)用程序來(lái)讓它支持其它類型的日志記錄。這樣你就可以捕獲到更多的數(shù)據(jù),如瀏覽器類型以及referrer(referrer指得是鏈接到當(dāng)前網(wǎng)頁(yè)的前一個(gè)網(wǎng)頁(yè))。這里的經(jīng)驗(yàn)就是:在你編程的時(shí)候遵循標(biāo)準(zhǔn)或者慣例終究會(huì)簡(jiǎn)化工作。

php技術(shù)用定制的PHP應(yīng)用程序來(lái)獲取Web服務(wù)器的狀態(tài)信息,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 清风亭全集豫剧全场免费播放| 老司机你懂的视频| 纳西三部曲| 最后的武士| 在爱的名义下| 小娥| 红灯停绿灯行电影观看| 画皮2电影| 母亲とが话しています免费| 投诉法官最快最有效果电话| 刘浩存《一秒钟》舞蹈| 碧海情天 电视剧| 砌生猪肉| 道东道西| 大学生搜| 四 电影| 大海啊故乡钢琴谱| 女娲怀孕生孩子视频| 胖猫表情包| 布鲁克战队| 美少女战士变身| 男吸女人奶水视频免费观看| 卡士酸奶尽量少吃| 天堂真的存在| 人口高质量发展形势与政策论文 | 舞蹈压腿疼哭训练视频| 口述与子性细节过程| 叶子楣伦理| 彭丹三级裸奶视频| 复仇者联盟4免费完整版电影| 韩国电影销售| 婴儿睡眠时间对照表 | 超越情感电视剧免费观看全集完整版 | 无声真相电影免费观看| 春光外泄| 张韶涵个人简历| 安多卫视直播在线观看| 朱莉·德尔佩| 微信头像2024年最新版图片男| 情事:秘密情事| 秦腔《铡美案》全本|