|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
PHP下定制自己的记数器 计数器是让 Web 访客知道该网页或者网站的人气指数最直接的方式,同时,访客人数也是给广告商做广告的最好依据。虽然很多网站都提供免费的计数器,可究竟不是自己亲手制作的,不能体现出自己的特色。下面就PHP环境下记数器的制作过程进行具体的讨论。 访客计数器的流程如下: 第一位使用者浏览某页。 服务器程式从资料库或档案中读取该页被浏览次数。 将次数加一储存,并将它送回第一位使用者。 下一位使用者浏览某页。 服务器程式从资料库或档案中读取该页被浏览次数。 将次数再加一储存,并将它送回下一位使用者。 PHP中没有直接的计数器函数,但利用它强盛的功能,我们可以很轻易地自己编写一个计数器。计数器的实现分为两个阶段:一是实现计数;二是实现数字的显示。在实现计数时又有两种方法:一是基于文件的计数方法;二是基于数据库的计数方法。同样在实现数字的显示上也有两种方法:一是普通的文本显示;二是图形方法显示。下面就分别将这四种情况作一一介绍. 一、计数的实现 1.基于文件的计数 原理:把以往的访问人数记录在一个文本文件中,当网页被访问的时候,打开该文件并从中读出以往的访问人数,加 1,得到最新的访问人数,再把最新的访问数字回写到纪录访问人数的文件中。 实现; <?php $counterFile = "counter.txt"; if (!file_exists($counterFile)) { //判定文件是否存在 $fp = fopen($counterFile, "w"); fputs($fp, "0"); fclose($fp); } //读文件 $n=10; $fp = fopen($counterFile, "r"); $str1 = fgets($fp,$n); $str1++; fclose($fp); //回写文件 $fp = fopen($counterFile, "w"); fputs($fp, $str1); fclose($fp); ?> 程序说明:在浏览到本页时,PHP 程式先找寻 counter.txt 文件是否存在,若不存在,则建立一个 counter.txt 文件,并将 0 写入文件。然后读取 counter.txt 文件的内容,并将读出的数字加一,然后回写到文件中。 2、基于数据库的计数 原理:把访问人数记录在一个数据库中,当网页被访问的时候,从数据库中读出以往的访问人数,加 1,得到最新的访问人数,再把最新的访问数字回写到数据库中。 实现:假设数据库为Mysql数据库,名为XinXiKu,先建一数据表count,表字段中仅有counter一个字段,默认值为0,来记录访问人数。 <?php //连接数据 $db=mysql_connect("localhost","root",""); mysql_select_db("XinXiKu",$db); //更新访问人数 $result=mysql_query("update count set counter=counter+1",$db); ?> 程序说明:访问者在浏览到本页时,首先连接到数据库,并把记数字段用原值加1来进行更新操作,实现访问数的递增。 二、记数的显示 1、普通的文本方法显示 这种显示方式很简朴,在需要显示记数的地方直接输出即可。以上面的例子分别说明: 基于文件的计数,直接输出变量str1的内容即可。 <?php echo $str1 ; ?> 基于数据库的计数,首先从数据库中读出,然后再输出。 <?php //查询数据库 $sql="select * from count"; $result=mysql_query($sql,$db); //取得记录集 $record=mysql_fetch_array($result); //取得访问人数 $str1=$record["counter"]; echo $str1; ?> 同样,你也可以用html语句像 <font color size>等对输出的数字进行修饰。文本显示的长处是减少下载时间,浏览速度快。缺点是显示方法不够活泼。 2、图形方法显示 原理:把读出的访问数据格式化成标准的格式,然后利用php提供的图像处理函数,把数字输出成图片格式。这样,数字的显示格式可以随意控制,真正能体现出自己的特色来。 实现: <? Header("Content-type: image/gif"); //定义输出为图像类型 $n=10; //变量$n是显示位数 //利用上面的方式,取得访问人数并赋值给变量$str1 (程序略) $str1=取得访问人数的值 $str2 = ""; //位数假如不够$n位,在前面补0 $len1 = strlen($str1); for ($i=1;$i<=$n;$i++) { $str2 = "0".$str2; }; //得到$n位0 $len2 = strlen($str2); //计算访问人数的位数 $dif = $len2 - $len1; $rest = substr($str2, 0, $dif); $string = $rest.$str1; //位数假如不够$n位,在前面补0 for ($i=0;$i<=$n-1;$i++) { $str[$i]=substr($string,$i,1); }; //以数组存储每位数字 $font = 4; //定义字号 $im = imagecreate($n*11-1,16); //新建图象 $black = ImageColorAllocate($im, 0,0,0); $white = ImageColorAllocate($im, 255,255,255); //定义颜色 imagefill($im, 0,0,$black); //把计数器的底色设置成黑色 ImageString($im,$font,1,0,$str[0],$white); for ($i=1;$i<=$n-1;$i++) { imageline($im, $i*11-1,0,$i*11-1,16, $white); ImageString($im,$font,$i*11+1,0,$str[$i],$white); }; //将每位写入图象,并以竖线分隔 ImageGif($im); //图象输出 ImageDestroy($im); //释放图象 ?> 输出图形如图如示: 函数说明: imagecreate(int x_size, int y_size):建立一张全空的图形。参数 x_size、y_size 为图形的尺寸,单位为像素 (pixel)。 imagecolorallocate(int im, int red, int green, int blue):用来匹配图形的颜色,供其它绘图函数使用。参数 im 表示图形的 handle。参数 red、green、blue 是色彩三原色,其值从 0 至 255。 imagefill(int im, int x, int y, int col):将图片坐标 (x,y) 所在的区域着色。参数 col 表示欲涂上的颜色。 imagestring(int im, int font, int x, int y, string s, int col):在图片上绘出水平的横式字符串。参数 font 为字形,设为 1 到 5 表示使用默认字形。参数 x、y 为字符串起点坐标。字符串的内容放在参数 s 上。参数 col 表示字符串的颜色。 imageline(int im, int x1, int y1, int x2, int y2, int col):在图形上画出一条实线。从 x1、y1 连接到 x2、y2,原点 (0,0) 为图形的左上角。参数 col 为实线的颜色。 imagegif(int im, string [filename]):建立一张 GIF 格式图形。参数 im 为使用 ImageCreate() 所建立的图片代码。 imagedestroy(int im):将图片 handle 解构,释于内存空间。 三、结束语 1、上述代码假如直接放在文件头,那么只要有人访问该页,无论是刷新还是从网站的其它页跳转到该页,就会使计数值加1,从而使主页计数失去了真实性。有两个很简朴的办法可以解决。 a、在返回到该页的链接上传递一个参数flag,比如:index.php?flag=1,在计数之前首先检查flag变量是否已赋值,若未赋值,计数器加1。否则不加。 if(empty($flag)){ $counter+=1; } b、用Session记录一标志flag,在记数前先判定flag是否已赋值,假如没赋值,则记数加1,并给flag赋值,否则,记数器不变。 if (!isset($flag)) { //处理记数器加1语句 ... //赋值flag session_start(); session_register("flag"); $flag=1; } 2、为了方便,可以将计数器作为一个函数MyCounter(),这样只许需在主页开头加入require("filename"); 使MyCounter()成为此主页的一部分,需要的时候,将<? MyCounter();?>加在需要计数器的地方显示就可以了。 3、利用图形显示计数器时,在需要的地方直接插入:<img src="counter.php" border=0>即可。但要注重的是PHP中必须安装GD库才能利用php中的图像处理函数。 返回类别: 教程 上一教程: PHP 增加了对 .ZIP 文件的读取功能 下一教程: CGI安全漏洞资料速查 v1.0(转三) 您可以阅读与"PHP教程.应用实例8"相关的教程: · PHP教程.应用实例6 · PHP教程.应用实例15 · PHP教程.应用实例3 · PHP教程.应用实例17 · PHP教程.应用实例9 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |