用PHP產生訪客計數器_PHP

來源:互聯網
上載者:User
關鍵字 計數器 訪客 產生 int 檔案 im 映像 fp
計數器

 現在,上網的人越來越多,許多網友嘗試著製作自己的首頁,訪客計數器是必不可少的一部分。雖然很多網站提供免費的計數器,可畢竟不是自己親手製作的?有的朋友可能認為它很難,不敢去嘗試,其實有了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 是Image Recognition號。


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 是要釋放的Image Recognition號。


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


在自己的首頁上可以這樣調用這個計數器:


下面是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()成為此首頁的一部分,需要的時候,將加在需要計數器的地方就可以了。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.