Đặt Bộ đếm trên trang Web
Thật là điều tự nhiên, ngay khi đưa trang web đầu
tiên của mình lên Internet, bạn đã muốn biết có bao nhiêu người sẽ đến đọc trang
web đó. Cũng như bạn, tôi đã từng sử dụng khá nhiều những bộ đếm (counter) miễn
phí. Nhưng rồi không bằng lòng với những gì được cho không, cộng với chút công
sức tìm hiểu, tôi đã tìm ra được cách làm bộ đếm cho mình.
Vì bộ đếm này được viết bằng PHP nên điều kiện để bộ đếm hoạt động được là
website của bạn phải hỗ trợ PHP. Nếu bạn muốn lưu giữ website miễn phí thì đây
là một số nhà cung cấp dịch vụ lưu website có hỗ trợ PHP: www.cbj.net,
www.lycos.co.uk, www.sourceforge.net, …
Sau đây là hướng dẫn nhanh để bạn có được bộ đếm trên trang web của mình.
Bước 1: Mở tệp web muốn đặt bộ đếm bằng một trình soạn thảo văn bản như Notepad,
EditPlus, UltraEdit. Mã HTML trang web của bạn sẽ hiện lên trong trình soạn
thảo.
Bước 2: Tìm đến vị trị bạn muốn hiện bộ đếm, và dán đoạn mã PHP dưới đây vào:
<?
$CountFile = "index.log";
$CF = fopen ($CountFile, "r");
$Hits = fread ($CF, filesize ($CountFile));
fclose ($CF);
$Hits++;
$CF = fopen ($CountFile, "w");
fwrite ($CF, $Hits);
fclose ($CF);
echo ($Hits);
?>
Bước 3: Lưu tệp. Nếu tệp có phần mở rộng là .htm thì đổi tên sang .php. Ví dụ
index.htm thì đổi thành index.php. Có vậy thì server mới hiểu và thi hành đoạn
mã để hiện bộ đếm.
Bước 4: Tạo một tệp văn bản có tên index.log để lưu giá trị đếm. Nội dung tệp
này là một con số bất kỳ mà bạn muốn bắt đầu cho bộ đếm của mình (ta hãy bắt đầu
bằng con số 0). Nhớ đừng thêm dấu cách, Enter hay một ký tự nào khác ngoài con
số trên.
Bước 5: Upload tệp web chứa bộ đếm (index.php) và tệp index.log lên website của
bạn. Và nhớ đặt thuộc tính cho tệp index.log là writable bằng lệnh chmod 777.
Bây giờ, hãy đánh địa chỉ tệp web của mình trong trình duyệt, bạn sẽ thấy trang
web hiện lên cùng với bộ đếm. Mỗi lần bạn nhấn nút Refresh thì bộ đếm lại tăng
lên 1 đơn vị.
***
Nay ta hãy nhìn sâu vào đoạn mã PHP một chút. Nguyên lý chung của các bộ đếm là
lưu giá trị đếm vào một tệp riêng, mỗi lần có người truy cập đến tệp web thì sẽ
đọc giá trị lưu trong tệp đếm, tăng thêm 1, ghi lại vào tệp đếm và hiện giá trị
đó lên màn hình.
Trước hết, ta cần cho chương trình biết giá trị đếm được lưu ở đâu, hay nói cách
khác, tên tệp lưu giá trị đếm là gì:
$CountFile = "index.log";
Dùng các hàm xử lý tệp do PHP cung cấp, ta lần lượt mở tệp ở chế độ đọc ("r" có
nghĩa là "reading") và gán con trỏ tệp cho biến $CF:
$CF = fopen ($CountFile, "r");
đọc toàn bộ nội dung tệp và lưu vào biến $Hits:
$Hits = fread ($CF, filesize ($CountFile));
và đóng tệp lại sau khi đọc xong:
fclose ($CF);
Giá trị đếm hiện tại đã được lưu ở biến $Hits, giờ ta tăng biến này thêm 1 để
chỉ rằng đã có thêm một người nữa truy cập trang web:
$Hits++;
Các bước tiếp theo cũng tương tự như ở trên. Ta mở tệp ở chế độ ghi ("w" có
nghĩa là "writing"), ghi lại biến $Hits (đã tăng thêm 1 so với trước) và đóng
tệp sau khi ghi xong:
$CF = fopen ($CountFile, "w");
fwrite ($CF, $Hits);
fclose ($CF);
Việc cuối cùng là ta hiện giá trị đếm lên màn hình:
echo ($Hits);
Giá trị đếm này hiện lên ở chế độ văn bản, sử dụng đúng loại font mà bạn đang
dùng trong trang web. Nếu bạn muốn thay đổi kiểu chữ, cỡ chữ, màu sắc để làm nổi
bật bộ đếm, bạn có thể sử dụng thẻ <FONT> trong mã HTML để làm điều này.
***
Bạn chắc cũng chưa thoả mãn với bộ đếm ở dạng văn bản mà muốn bộ đếm được thể
hiện ở dạng đồ hoạ, giống như ở các trang web chuyên nghiệp khác. Việc này không
khó. Bạn cần có thêm các tệp ảnh (dạng .gif hoặc .jpg) chứa các con số từ 0 đến
9. Bạn có thể tải về nhiều tệp ảnh với các hình dạng con số khác nhau tại
Digitmania. Giả sử các tệp ảnh này có tên lần lượt là 0.gif, 1.gif, … 9.gif -
mỗi tệp tương ứng với một con số, và các tệp ảnh này đều lưu ở cùng thư mục với
tệp index.php trên server.
Đoạn mã PHP trong tệp index.php sẽ như sau:
<?
$CountFile = "index.log";
$CF = fopen ($CountFile, "r");
$Hits = fread ($CF, filesize ($CountFile));
fclose ($CF);
$Hits++;
$CF = fopen ($CountFile, "w");
fwrite ($CF, $Hits);
fclose ($CF);
for ($i = 0; $i < strlen($Hits); $i++)
{
$Digit = substr ($Hits, $i ,1);
echo "<IMG SRC = \"$Digit.gif\">";
}
?>
Bạn thấy là những dòng đầu hoàn toàn giống như trước. Sự khác nhau chỉ bắt đầu ở
dòng cuối cùng. Thay vì dòng lệnh echo ($Hits); ta dùng vòng lặp for để lần lượt
tách từng con số trong giá trị đếm và lưu tạm vào một biến gọi là $Digit:
$Digit = substr ($Hits, $i ,1);
sau đó ta sẽ dùng thẻ <IMG> của HTML để chỉ ra các tệp ảnh nào ta muốn hiện
tương ứng với từng con số trong giá trị đếm:
echo "<IMG SRC = \"$Digit.gif\">";
Ví dụ giá trị đếm lưu trong biến $Hits là 865. Giá trị này gồm 3 chữ số nên vòng
lặp for sẽ được thực hiện 3 lần. Tại lần thứ nhất, biến $Digit sẽ được gán với
con số thứ nhất, tức là bằng 8. Lần thứ hai và thứ ba, biến $Digit sẽ lần lượt
nhận giá trị là 6 và 5. Kết quả là trang web index.php khi xuất hiện trong trình
duyệt của người dùng sẽ có mã HTML thực tế là:
<IMG SRC="8.gif"><IMG SRC="6.gif"><IMG SRC="5.gif">
và trình duyệt sẽ hiện lên 3 tệp ảnh tương ứng với các con số 8, 6, 5, tạo thành
một dãy số hoàn chỉnh là số lần trang web đã được truy cập.
***
Câu hỏi cuối cùng đặt ra: Làm thế nào để đặt bộ đếm trên nhiều trang web khác
nhau mà mỗi trang không phải lặp lại đoạn mã trên nữa? Cũng như nhiều ngôn ngữ
lập trình khác, PHP cho phép người dùng tạo ra các hàm xử lý riêng và đặt các
hàm này ở một tệp riêng để giảm bớt chiều dài cho tệp chính. Tệp chứa các hàm
riêng như vậy gọi là tệp thư viện.
Vận dụng khả năng trên, ta đặt toàn bộ đoạn mã bộ đếm vào một hàm gọi là Counter
và đặt hàm này vào một tệp thư viện có tên là ezcount.php. Hãy nhìn vào nội dung
của tệp ezcount.php này là gì:
<?php
function Counter ($CountFile, $Text, $ImgPath, $ImgType)
{
$CF = fopen ($CountFile, "r");
$Hits = fread ($CF, filesize ($CountFile));
fclose ($CF);
$Hits++;
$CF = fopen ($CountFile, "w");
fwrite ($CF, $Hits);
fclose ($CF);
if ($Text)
{
echo ($Hits);
}
else
{
for ($i = 0; $i < strlen($Hits); $i++)
{
$Digit = substr ($Hits, $i ,1);
echo "<IMG SRC =\"$ImgPath/" . $Digit . "$ImgType\">";
}
}
}
?>
Ta dễ dàng nhận thấy nội dung chính của tệp ezcount.php cũng giống như đoạn mã
mà ta đã biết. Nhưng ở đây có một số điểm mới nhằm giúp đoạn mã được sử dụng
linh hoạt hơn. Hãy nhìn vào dòng đầu tiên của hàm:
function Counter ($CountFile, $Text, $ImgPath, $ImgType)
Dòng này chỉ ra hàm của chúng ta có tên là Counter và có 4 giá trị đầu vào, hay
còn gọi là 4 tham số.
• Tham số thứ nhất $CountFile chỉ ra tên tệp lưu giá trị đếm. Với mỗi tệp web,
ta cần có một tệp lưu giá trị đếm nên ta cần phải chỉ rõ tên tệp lưu giá trị đếm
này khi gọi hàm để tránh ghi nhầm vào tệp lưu giá trị đếm khác.
• Vì có lúc ta muốn dùng bộ đếm dạng văn bản, có lúc lại muốn dùng bộ đếm dạng
đồ hoạ nên ta cần có một tham số $Text có tác dụng như nút chuyển giữa hai dạng
này. Nếu muốn thể hiện bộ đếm dạng văn bản, khi gọi hàm ta đặt tham số này bằng
1, còn với bộ đếm dạng đồ hoạ, tham số này cần đặt bằng 0.
• Tham số thứ ba $ImgPath chỉ ra đường dẫn thư mục lưu các tệp ảnh chứa con số.
Vì tệp web chứa bộ đếm có thể không nằm cùng thư mục với các tệp ảnh chứa con số
nên ta cần có đường dẫn này để tìm đến đúng nơi chứa các tệp ảnh.
• Tham số thứ tư $ImgType chỉ ra loại tệp ảnh, được thể hiện bằng phần mở rộng
của tệp là ".gif" hoặc ".jpg".
Giờ ta nhìn vào đoạn cuối của hàm. Đây là nơi xử lý cụ thể việc lựa chọn giữa bộ
đếm dạng văn bản và dạng đồ hoạ. Ý nghĩa của biểu thức if … else ở đây là: Nếu
biến $Text bằng 1, sẽ thi hành mã lệnh echo ($Hits); để hiện bộ đếm dạng văn
bản, còn nếu không (khi biến $Text bằng 0) sẽ thi hành đoạn mã để hiện bộ đếm
dạng đồ hoạ.
Khi chọn sử dụng bộ đếm dạng đồ hoạ, các tham số $ImgPath và $ImgType trong dòng
lệnh echo "<IMG SRC =\"$ImgPath/" . $Digit . "$ImgType\">"; sẽ được thay bằng
nội dung cụ thể khi gọi hàm.
Để sử dụng hàm Counter, trong tệp web đặt bộ đếm (index.php) ta chỉ cần đặt
những dòng sau:
<?php
include "ezcount.php";
Counter ("index.log", 0, "digit", ".gif");
?>
Đoạn mã trên sẽ đưa nội dung tệp ezcount.php thành một phần của tệp index.php và
gọi hàm Counter với các tham số cụ thể: tên tệp lưu giá trị đếm là index.log, sử
dụng bộ đếm dạng đồ hoạ ($Text bằng 0), thư mục chứa các tệp con số là digit, và
phần mở rộng của các tệp con số là .gif.
Bằng cách gán sẵn một số giá trị cho các tham số khi khai báo hàm như sau:
function Counter ($CountFile, $Text=1, $ImgPath="digit", $ImgType=".gif")
nếu cần gọi hàm Counter để hiện bộ đếm dạng văn bản, bạn chỉ cần viết như sau:
<?php
include "ezcount.php";
Counter ("index.log");
?>
THANH HẢI
www.thanhhai.com
PcLeHoan
1996 - 2002
Mirror :
http://www.pclehoan.com
Mirror :
http://www.lehoanpc.net
Mirror :
http://www.ktlehoan.com