国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

PHP下定制自己的記數器詳解

2024-05-04 23:04:48
字體:
來源:轉載
供稿:網友
計數器是讓 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中的圖像處理函數。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 连云港市| 夏河县| 田阳县| 固安县| 剑河县| 新丰县| 利辛县| 股票| 泰顺县| 汪清县| 新安县| 梧州市| 嘉义市| 石河子市| 黎平县| 武城县| 会理县| 来宾市| 长治县| 潼关县| 永城市| 福安市| 林芝县| 盐城市| 绥化市| 班戈县| 即墨市| 张家港市| 石门县| 墨竹工卡县| 东港市| 柳州市| 郑州市| 平乡县| 兴海县| 洪湖市| 康保县| 柳河县| 黄冈市| 远安县| 沂源县|