冷月葬花魂 发表于 2015-2-4 00:28:19

PHP网页编程之用定制的PHP使用法式来获得Web办事器的...

你发奋努力,熟悉了安全方面的问题,然后又设计了一些程序,感觉还不错。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 - - "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,但是也必须先跟它混个脸熟,看,一遍遍的看,看的同时一边琢磨,一边按照它所教的打代码,即使你搞不清楚那些代码到底是干嘛的,但是起码你应该找找感觉。

蒙在股里 发表于 2015-2-6 07:45:33

php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)

兰色精灵 发表于 2015-2-10 01:47:56

首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。

再现理想 发表于 2015-2-28 12:58:51

本文当是我的笔记啦,遇到的问题随时填充

冷月葬花魂 发表于 2015-3-11 11:47:04

首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。

爱飞 发表于 2015-3-18 08:40:04

有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。

莫相离 发表于 2015-3-22 03:10:33

Ps:以上纯属原创,如有雷同,纯属巧合

精灵巫婆 发表于 2015-3-25 02:36:40

这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己

分手快乐 发表于 2015-3-25 13:42:39

说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年具体的记不清啦,囧。

若天明 发表于 2015-4-1 12:57:58

,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。

仓酷云 发表于 2015-4-3 11:16:08

其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。

飘飘悠悠 发表于 2015-4-6 03:10:35

再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。

金色的骷髅 发表于 2015-4-13 08:57:23

如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,

乐观 发表于 2015-4-19 10:32:31

php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)

老尸 发表于 2015-4-21 15:51:56

Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81

admin 发表于 2015-5-2 02:24:46

建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。

简单生活 发表于 2015-5-6 04:09:00

我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:

若相依 发表于 2015-5-9 23:03:17

对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。

愤怒的大鸟 发表于 2015-6-14 20:00:47

学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
页: [1]
查看完整版本: PHP网页编程之用定制的PHP使用法式来获得Web办事器的...