<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      用PHP生成訪客計數器

      [摘要]現在,上網的人越來越多,許多網友嘗試著制作自己的主頁,訪客計數器是必不可少的一部分。雖然很多網站提供免費的計數器,可畢竟不是自己親手制作的?有的朋友可能認為它很難,不敢去嘗試,其實有了PHP這個工具...
      現在,上網的人越來越多,許多網友嘗試著制作自己的主頁,訪客計數器是必不可少的一部分。雖然很多網站提供免費的計數器,可畢竟不是自己親手制作的?有的朋友可能認為它很難,不敢去嘗試,其實有了PHP這個工具,它并不難,甚至可以說它很容易。


      首先,讓我來談一談訪客計數器的思路:一位訪問者瀏覽此頁,服務器(如Apache)從一個文檔(下文以num.txt為例)中讀取該頁已被瀏覽的次數,加一,然后存回num.txt,并在瀏覽器中顯示加一后的次數。 如果又一位訪問者瀏覽此頁,服務器又重復上述過程,從而實現了訪客計數器。


      PHP沒有直接的計數器函數,但利用它強大的功能,我們可以很容易地自己編寫一個計數器。


      現對程序需要用到的函數進行說明:


      1. 打開文件操作:int fopen(string filename, string mode);


      其中string filename 是要打開的文件名,必須為字符串形式。例如"num.txt"。


      string mode 是打開文件的方式,必須為字符形式。


      ’r’,只讀形式,文件指針指向文件的開頭。


      ’r+’,可讀可寫,文件指針指向文件的開頭。


      ’w’,只寫形式,文件指針指向文件的開頭,把文件長度截成0,如果文件不存在,將嘗試建立文件。


      ’w+’,可讀可寫,文件指針指向文件的開頭,把文件長度截成0,如果文件不存在,將嘗試建立文件。


      ’a’,追加形式(只可寫入),文件指針指向文件的最后,如果文件不存在,將嘗試建立文件。


      ’a+’,可讀可寫,文件指針指向文件的最后,如果文件不存在,將嘗試建立文件。


      2. 讀文件操作:string fgets(int fp, int length);


      其中 int fp 是要讀入數據的文件流指針,由fopen函數返回數值。


      int length 是要讀入的字符個數,實際讀入的字符個數是length-1。


      3. 寫文件操作:int fputs(int fp, string str, int [length]);


      其中int fp 是要寫入信息的文件流指針,由fopen函數返回數值。


      string str 是要寫入文件的字符串。


      int length 是寫入的長度,可選,如果不選length,則整個串將被寫入。否則,寫入length長度個字符。


      4. 關閉文件操作:int fclose(int fp);


      其中int fp是fopen函數返回的文件流指針。

      下面,我們來看一下計數器的原型:(假設num.txt文件存在)














      $fp = fopen("num.txt", "r");


      //只讀方式打開num.txt文件


      $num = fgets($fp,5);


      //讀取4位數字


      $num++;


      //瀏覽次數加一


      fclose($fp);


      //關閉文件


      $fp = fopen("num.txt", "w");


      //只寫方式打開num.txt文件


      fputs($fp, $str1);


      //寫入加一后結果


      fclose($fp);


      //關閉文件


      echo "$num";


      //瀏覽器輸出瀏覽次數


      ?>






      需要說明的是,這只是計數器的原型,它只能以文本方式顯示次數,并不美觀,而PHP具有極其強大的圖像處理能力,用它可以很輕易的動態生成WEB圖像。下面對上述原型加以修改,使之成為一個真正實用的計數器。


      它的思路是這樣的:用原型中的方法得到訪問次數,把此數字轉為標準格式,進行圖象處理,并輸出成圖片,顯示。

      如果要生成記數圖象,需要以下函數:


      1. 字符串長度函數:int strlen(string str);


      其中string str 是要計算長度的字符串。


      2. 字符串相加:


      如,把 $string1和$string2相加:


      $string = $string1.$string2


      3. 新建圖像函數:int imagecreate(int x_size, int y_size);


      其中x_size,y_size分別是新建圖像的寬度和高度(以像素為單位)。


      4. 顏色函數:int imagecolorallocate(int im, int red, int green, int blue);


      其中int im 是圖像識別號。


      int red、green、blue分別是紅綠藍三種顏色的分量,取值范圍 0 - 255,即相應顏色的RGB。


      5. 給圖像填充顏色的函數:int imagefill(int im, int x, int y, int col);


      其中int x, int y為開始填充顏色的圖像坐標,以圖像的左上角為(0,0)。


      int col是顏色的識別號。


      6. 在圖像中寫入水平文字的函數:int imagestring(int im, int font, int x, int y, string s, int col);


      其中int im 是圖像的識別號。


      int font 是字體識別號。


      int x,int y 是開始寫入字體的坐標,(0,0)為左上角。


      string s 是要寫入的字符串。


      int col 是字體的顏色識別號。


      7. 在圖像中劃直線的函數:int imageline(int im, int x1, int y1, int x2, int y2, int col);


      其中int im 是圖像的識別號。


      int x1,int y1,int x2,int y2是劃線的起止坐標。


      int col 是線的顏色識別號。


      8. 把圖像輸出成GIF格式的函數:int imagegif(int im, string filename);


      其中int im 是圖像的識別號。


      string filename是生成圖片的名字,可選,如果filename為空,則直接的輸出。


      9. 釋放圖像:int imagedestroy(int im);


      其中int im 是要釋放的圖像識別號。


      該函數釋放識別號im的圖像及圖像所占用的系統資源。


      在自己的主頁上可以這樣調用這個計數器:<img src="counter.php3">


      下面是counter.php3的程序清單:




      Header("Content-type: image/gif");


      //定義輸出為圖像類型


      $n=10;


      //變量$n是顯示位數


      $fp = fopen("num.txt", "r");


      $str1 = fgets($fp,$n+1);


      $str1++;


      fclose($fp);


      $fp = fopen("num.txt", "w");


      fputs($fp, $str1);


      fclose($fp);


      //同原型


      $str2 = "";


      $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);


      //釋放圖象


      ?>


      另外,為了方便,還可以用將計數器作為一個函數MyCounter(),這樣只許需在主頁開頭加入require(“filename”);使MyCounter()成為此主頁的一部分,需要的時候,將加在需要計數器的地方就可以了。




      日韩精品一区二区三区高清