Có nhiều bạn khi tạo cho mình một Website riêng rất muốn đặt một bộ đếm để xem có bao nhiêu người đã ghé thăm trang Web của mình, điều đó không khó bạn có thể đăng ký free ở http://bravenet.com . Tuy nhiên nếu bạn muốn tự tạo cho mình một bộ đếm thì dưới đây mình sẽ hướng dẫn bạn tạo bộ đếm bằng PHP.
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: http://www.coolwebpage.com/, http://www.lycos.co.uk/, http://www.sourceforge.net/, …
Bây giờ thì chúng ta bắt đầu 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ị.
***
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");
?>
Chúc bạn thành công!
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: http://www.coolwebpage.com/, http://www.lycos.co.uk/, http://www.sourceforge.net/, …
Bây giờ thì chúng ta bắt đầu 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ị.
***
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");
?>
Chúc bạn thành công!
"Nước Mắt Mùa Thu khóc ai trong chiều
Nước mắt nào rơi gởi tâm tư về đâu..."
Nước mắt nào rơi gởi tâm tư về đâu..."