一个用php3编写的简单计数器_php基础

php具有极其强大的图像处理能力,用它可以很轻易的动态生成web图像。  
一下是一个使用php做成的一个简单计数器。  

1. 总体思路:  
把以往的访问人数记录在一个文本文件中,当网页被访问的时候,从打开该文件  
并从中读出以往的访问人数,加 1,得到最新的访问人数,并把该数目格式化成  
标准的格式,再调用图像处理函数,把该数字输出成图片,再把新的访问数字回  
写到纪录访问人数的文件中。  

2. 程序所用到的函数说明:  
A. 相关的文件操作:  
a. 打开文件:  
   函数的原型:int fopen(string filename, string mode);  
   返回结果:如果打开文件成功,函数返回文件流指针,否则返回 FALSE(0)。  
   参数说明:  
     string filename -- 要打开的文件名,必须为字符串形式。  
        例如, "zzm.txt"、"..\zzm.txt"等。  
     string mode -- 打开文件的方式,必须为字符形式。  
        'r',只读形式,文件指针指向文件的开头  
        'r+',可读可写,文件指针指向文件的开头  
        'w',只写形式,文件指针指向文件的开头,把文件长度截成0,  
             如果文件不存在,将尝试建立文件。  
        'w+',可读可写,文件指针指向文件的开头,把文件长度截成0,      
             如果文件不存在,将尝试建立文件。  
        'a',追加形式(只可写入),文件指针指向文件的最后,如果文  
             件不存在,将尝试建立文件。  
        'a+',可读可写,文件指针指向文件的最后,如果文件不存在,  
             将尝试建立文件。  
    例子:用只读形式打开当前目录下面的"zzm.txt"  
         $fp = fopen("zzm.txt", "r");  

b. 关闭文件:  
    函数原型:int fclose(int fp);  
    返回结果:成功返回1,失败返回0  
    参数说明:int fp是 fopen函数返回的文件流指针。  
    例子:关闭干刚才用fopen打开的zzm.txt文件  
          fclose($fp);  

c. 读文件:  
    函数原型:string fgets(int fp, int length);  
    返回结果:返回 length -1 长度的字符串,如果到文件结尾,返回 EOF(End Of File)  

    参数说明:  
        int fp -- 要读入数据的文件流指针,由fopen函数返回的数值  
        int length -- 读入的字符个数,实际读入字符个数为 length -1 个         
    例子:从 $fp 中读取9个字符  
          $str1 = fgets($fp,10);  

d. 写文件:  
    函数原型:int fputs(int fp, string str, int [length]);  
    返回结果:和fclose同  
    参数说明:  
        int fp -- 要写入信息的文件流指针,由fopen函数返回的数值  
        string str -- 要写入文件的字符串。  
        int length -- 写入的长度,可选的,如果不提供length,则整个串将被写入,  
               否则,写入length长度个字符。  
    例子:向 $fp 写入 "0000000001"  
        fput($fp, "0000000001");  

B. 相关的字符串函数:  
a. 计算字符串长度:  
    函数原型:int strlen(string str);  
    返回结果:返回字符串的长度  
    参数说明:  
        string str -- 要计算长度的字符串  
    例子:计算 "000000000" 的字符串长度  
        $str2 = "000000000";                    
        $len2 = strlen($str);  

b. 字符串相加:最简单不过了,用一个 . 把两个字符串连接起来。  
    例子:把 $str1和$str2相加  
        $str = $str1.$str2  

C. 相关的图形函数:  
a. 新建图像:  
    函数原型:int imagecreate(int x_size, int y_size);  
    返回结果:返回一个 X*Y 像素大小的空图像识别号(ImageID)  
    参数说明:x_size,y_size分别是新建图像的宽度和高度(以像素为单位)  
    例子:新建一个 88*31 像素大小的空图片  
         $ImageID = imagecreate(88, 31);  

b. 给图像分配一种颜色:  
    函数原型:int imagecolorallocate(int im, int red, int green, int blue);  
    返回结果:给图像($im)返回一个RGB颜色识别号  
    参数说明:int im 图像识别号  
              int red、green、blue分别是红绿蓝三种颜色的分量,取值范围 0 - 255  
    例子:给图像$im 分配一个识别号为$white白色颜色,白色的RGB为(255,255,255)  
         $white = imagecolorallocate($im, 255, 255, 255);                      
c. 给图像填充颜色:  
    函数原型:int imagefill(int im, int x, int y, int col);  
    返回结果:成功返回1,否则返回0  
    参数说明:int im,图像的识别号  
              int x, int y,从图像的(x,y)坐标开始填充颜色  
              (0,0)表示图像的左上角  
              int col,颜色的识别号  
    例子:从图像的左上角开始(即整个图片)填入黑色(已经用imagecolorallocate函数  
          定义了黑色的颜色识别号为$black了)。  
        imagefill($im, 0, 0, $black);  

d. 计算图像的宽度:  
    函数原型:int imagesx(int im);  
    返回结果:返回图像的宽度(单位为像素)  
    参数说明:int im,图像的识别号。  
    例子:计算图像$im的宽度  
        $px = imagesx($im);  

e. 在图像中写入水平文字:  
    函数原型:int imagestring(int im, int font, int x, int y, string s, int col)  

    返回结果:成功返回1,否则返回0    
    参数说明:int im,图像的识别号  
              int font,字体识别号,内建字体1到5,用户可以用imageloadfont()自己?  
?  
                        载字体.  
              int x,int y,开始写入字体的坐标,(0,0)为图片的左上角。  
              string s,要写入的字串  
              int col,字体的颜色识别号  
     例子:在图像(3,3)位置写入字号为3,颜色为白(已经用imagecolorallocate()函数  
           定义了黑色的颜色识别号为$white)的字串"E&J Counter"  
           ImageString($im, 3, 3, 3, "E&J Counter", $white);  

f. 在图像中划直线:  
    函数原型:int imageline(int im, int x1, int y1, int x2, int y2, int col);  
    返回结果:成功返回1,否则返回0  
    参数说明:int im,图像的识别号  
              int x1,int y1,划线的起坐标  
              int x2,int y2,划线的止坐标  
              int col,线的颜色识别号  
    例子:在图像$im中划一条从(1,14)到(85,14)颜色为$white的直线  
         imageline($im, 1, 14, 85, 14, $white);  

g. 把图像输出成GIF格式:         
    函数原型:int imagegif(int im, string filename);  
    返回结果:成功返回1,否则返回0  
    参数说明:int im,图像的识别号  
              string filename,生成图片的名字,可选的,如果filename为空,则直接?  
氖涑?  
              图片,你需要用Header("Content-type: image/gif")预先定义php输出的内  
容为图片  
    例子:把图像$im输出成文件名为"image1.gif"的图片  
          imagegif($im, "image1.gif");  

h. 释放图像:  
    函数原型:int imagedestroy(int im);  
    返回结果:成功返回1,否则返回0  
    参数说明:int im,要释放的图像识别号。该函数会释放识别号im的图像及图像所占  
              用的系统资源。  
    例子:释放图像$im  
          imagedestroy($im);  

3. 如何安装这个计数器:  
A. 系统必须安装了PHP解释器。PHP可以在http://www.php.net/上下载,在该站点上还有很  
详细  
   的技术资料可以浏览或者下载阅读。如何安装PHP请参照它自己的说明。  
B. 把下面的程序清单拷贝到一个文件中,并取扩展名为php,放入能够运行php脚本的目录?  
旅妫?  
   并在目录下面建立一个纯文本文件,名字为zzm.txt。这个文件的作用是用来记录以往的  
访问人  
   数用的。你可以预先设置计数器的初始值,例如5000。  
C. 在网页如何调用这个计数器?你可以通过以下方式来调用:  
   <img src="YourURL/Counter.php">  

附:完整的程序清单  
<?  
    Header("Content-type: image/gif");  
    //定义输出为图像类型  

    $fp = fopen("zzm.txt", "r");  
    //以读形式打开记录以往访问人数的文件zzm.txt  

    $str1 = fgets($fp,10);  
    //从文件中读入9个字符,本计数器最大能记录的访问人数为999999999  

    $str1++;  
    //计数器加入       

    fclose($fp);  
    //关闭文件  

    $fp = fopen("zzm.txt", "w");  
    //一写的方式打开记录访问人数的文件zzm.txt  

    fputs($fp, $str1);  
    //把最新的访问人数写入文件  

    fclose($fp);  
    //关闭文件  

    /*  
    以下是把访问人数格式化输出,如果访问人数位数不够9位,例如时5000(4位),  
    则把访问人数变换成000005000的形式输出。方法是计算访问人数的位数,并且  
    把它和000000000的位数(9位)比较,得到相差的位数,然后在数字前面不上相  
    应个0。例如5000,和000000000两者的长度相差5,因此要在5000前面补5个0。  
    */  

    $len1 = strlen($str1);  
    //计算访问人数的位数              

    $str2 = "000000000";  
    $len2 = strlen($str);  
    //定义计数器最大的计数位数  

    $dif = $len2 - $len1;  
    //计算两者的位数之差,即前面要补的0的个数  

    $rest = substr($str2, 0, $dif);  
    //截取要补的0  

    $string = $rest.$str1;  
    //前面补0  

    $font = 4;  
    //定义字号  

    $im = imagecreate(88,31);  
    //新建图象  

    $black = ImageColorAllocate($im, 0,0,0);  
    //定义黑色                         

    $white = ImageColorAllocate($im, 255,255,255);  
    //定义白色  

    imagefill($im, 0,0,$black);  
    //把计数器的底色设置成黑色  

    $px = (imagesx($im)-8.3*strlen($string))/2;  
    //根据字串的长度,计算字串开始写入的水平坐标,目的是尽量让字串水平对中  

    ImageString($im,3,$px,2,"E&J Counter",$white);  
    //向图象写入"E&J Counter"  

    imageline($im, 1, 14, 85, 14, $white);  
    //划一根水平线  

    ImageString($im,$font,$px,15.5,$string,$white);  
    //写访问人数  

    ImageGif($im);  
    //把图象输出成GIF格式           
    ImageDestroy($im);  
    //释放图象  
?>              

时间: 2024-09-19 09:04:17

一个用php3编写的简单计数器_php基础的相关文章

一个用php3编写的简单计数器

php具有极其强大的图像处理能力,用它可以很轻易的动态生成web图像.  一下是一个使用php做成的一个简单计数器.   1. 总体思路:  把以往的访问人数记录在一个文本文件中,当网页被访问的时候,从打开该文件  并从中读出以往的访问人数,加 1,得到最新的访问人数,并把该数目格式化成  标准的格式,再调用图像处理函数,把该数字输出成图片,再把新的访问数字回  写到纪录访问人数的文件中.   2. 程序所用到的函数说明:  A. 相关的文件操作:  a. 打开文件:     函数的原型:int

用PHP写的一个冒泡排序法的函数简单实例_php实例

前几天遇到的一道关于算法的考题,要求用PHP语言实现对一个数组进行排序,我写了一个采用冒泡排序法的函数,和大家分享一下. <? //冒泡排序法 function bubble_sort($array) { $count = count($array); if($count <= 0) { return false; } for($i=0; $i<$count; $i++) { for($k=$count-1; $k>$i; $k--) { if($array[$k] < $a

PHP4与PHP3中一个不兼容问题的解决方法_php基础

PHP4与PHP3中有些不兼容的地方,但这主要是PHP4中的PHP.ini 中的设置有些不同的地方,这些改变主要是提高PHP4的效率. 其中的改变中,track_vars 的设置通常会是使旧的PHP3程序不能 再运行了,因为在PHP4的扩展设置中把track_vars 的值设为了off 这样旧的PHP3程序中就不能直接用GET,POST,COOKIE从上页传送过来 的变量了. 我这里有一个简单的解决的方法,不用把track_vars 的是设为on, 不过这只是一个权宜办法,以后大家还是用$HTT

一个PHP实现的轻量级简单爬虫_php实例

最近需要收集资料,在浏览器上用另存为的方式实在是很麻烦,而且不利于存储和检索.所以自己写了一个小爬虫,在网上爬东西,迄今为止,已经爬了近百 万张网页.现在正在想办法着手处理这些数据. 爬虫的结构:    爬虫的原理其实很简单,就是分析下载的页面,找出其中的连接,然后再下载这些链接,再分析再下载,周而复始.在数据存储方面,数据库是首选,便于检索,而 开发语言,只要支持正则表达式就可以了,数据库我选择了mysql,所以,开发脚本我选择了php.它支持perl兼容正则表达式,连接mysql很方 便,支

分享一个PHP数据流应用的简单例子_php实例

复制代码 代码如下: <?php $count = 5; start: if($count < 5) echo "You can try {$count} time, "; echo "Put Password: "; $handle = fopen ("php://stdin","r"); $line = fgets($handle); if(trim($line) != '123456'){ $count--;

编写PHP的安全策略_php基础

PHP最初是被称作Personal Home Page,后来随着PHP成为一种非常流行的脚本语言,名称也随之改变了,叫做Professional HyperText PreProcessor.以PHP4.2为例支持它的WEB服务器有:Apache, Microsoft Internet information Sereve, Microsoft Personal web Server,AOLserver,Netscape Enterprise 等等. PHP是一种功能强大的语言和解释器,无论是作

一次编写,随处运行_php基础

关于 PHP 的数据库 API 对于不同的数据库有不同的函数,一直以来就有人尝试使用 PHP 的面向对象的功能进行一些封装.其中有比较著名的ADODB,PHPLIB.后来举世瞩目的 PEAR 项目中的 PEAR DB 更是其中的佼佼者.这些用面向对象对数据库 API 进行的封装的包一般称为数据库抽象层. 本文介绍的是 PEAR 中对 PEAR DB 进行融合 Metabase 库的一些优秀功能之后产生的注重效率,而且简单易用,功能非常强大的 MDB 的一个非常好的介绍.作者就是 MDB 的主创人

用Zend Encode编写开发PHP程序_php基础

Zend Encode的工作原理 使用PHP的人都知道,它是一个脚本编程工具,用它写的程序,必须以源码的形式放置在Web服务器上,所以我们无法保护自己的源代码.大家都知道任何一个脚本程序的执行效率同具有相同功能的编译好的二进制代码相比较,它的执行效率都是比较低的.那么要是有一个工具能够帮我们把用PHP写的程序编 译成二进制代码就好了,这样不但执行效率提高了, 运行速度也加快了.真要是有这么一个工具,那就是 一举两得了. 现在这不是梦想了,Zend Encode就是为此而开发的,它可以直接将脚本编

一个用于MySQL的PHP XML类_php基础

我承认我不是PHP的领导者.然而,在看了一些PHP的信息之后,我认为有一些功能需要添加到其中来处理数据库连接和整合XML.要做到这一点,我想我可以创建一个处理连接MySQL和使用PHP中的domxml功能来提供XML输出的类.然后我就可以在PHP脚本的任何地方声明这个类并且在需要使用它的时候可以提供XML功能.  我假设人们使用PHP是原因是他的标价:免费.MySQL为需要向系统中增加数据库功能的开发人员提供一个免费的数据库解决方案.这些解决方案的缺点是在设置和管理的时候有些复杂. 我在这篇文章