仓酷云

标题: PHP教程之PHP下定制本人的记数器 [打印本页]

作者: 仓酷云    时间: 2015-2-4 00:03
标题: PHP教程之PHP下定制本人的记数器
然后大吼:别人可以,我为什么就不可以?(是不是有点阎罗教练的味道,默默的确是电影看多了,抽嘴巴是会痛的,各位其实明白这个道理了就行了)   

计数器是让 Web 访客晓得该网页或网站的人气指数最直接的办法,同时,访主人数也是给告白商做告白的最好根据。固然良多网站都供应收费的计数器,可究竟不是本人亲手制造的,不克不及表现出本人的特征。上面就PHP情况下记数器的制造进程停止具体的会商。
访客计数器的流程以下:
第一名利用者阅读某页。
办事器程式从材料库或档案中读取该页被阅读次数。
将次数加一贮存,并将它送回第一名利用者。
下一名利用者阅读某页。
办事器程式从材料库或档案中读取该页被阅读次数。
将次数再加一贮存,并将它送回下一名利用者。
PHP中没有直接的计数器函数,但使用它壮大的功效,咱们可以很轻易地本人编写一个计数器。计数器的完成分为两个阶段:一是完成计数;二是完成数字的显示。在完成计数时又有两种体例:一是基于文件的计数体例;二是基于数据库的计数体例。一样在完成数字的显示上也有两种体例:一是通俗的文本显示;二是图形体例显示。上面就分离将这四种情形作逐一引见.
1、计数的完成
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来停止更新操作,完成会见数的递增。
2、记数的显示
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 解构,释于内存空间。
3、停止语
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中的图象处置函数。

会HTML吗?会,我能编好几个大表格排板的网页啦!
作者: 只想知道    时间: 2015-2-4 08:23
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
作者: 兰色精灵    时间: 2015-2-6 03:41
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
作者: 飘飘悠悠    时间: 2015-2-9 03:10
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
作者: 若相依    时间: 2015-2-26 19:43
做为1门年轻的语言,php一直很努力。
作者: 冷月葬花魂    时间: 2015-2-27 05:46
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
作者: 谁可相欹    时间: 2015-2-28 16:53
使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的
作者: 莫相离    时间: 2015-3-1 20:07
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
作者: 透明    时间: 2015-3-5 20:39
基础有没有对学习php没有太大区别,关键是兴趣。
作者: 仓酷云    时间: 2015-3-11 13:11
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
作者: 小魔女    时间: 2015-3-12 17:33
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
作者: 深爱那片海    时间: 2015-3-20 00:50
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
作者: 简单生活    时间: 2015-3-23 22:17
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
作者: 小妖女    时间: 2015-4-1 14:08
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
作者: 山那边是海    时间: 2015-4-4 19:10
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
作者: 再现理想    时间: 2015-4-10 05:24
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
作者: 乐观    时间: 2015-4-16 16:09
实践是检验自己会不会的真理。
作者: 海妖    时间: 2015-4-19 15:15
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
作者: 不帅    时间: 2015-5-12 13:42
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
作者: 爱飞    时间: 2015-6-5 06:55
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2