Viết chương trình đếm số người online bằng PHP
Bài viết này sẽ hướng dẫn để viết một chương trình đếm số người online cho website của bạn, bao gồm cả số khách online và member online. Chúng ta sẽ sử dụng PHP Sessions và MySQL.
Database Table Configuration
Đầu tiên, hãy tạo một table trên CSDL:
CREATE TABLE ppl_online (
session_id varchar(255) NOT NULL default '',
activity datetime NOT NULL default '0000-00-00 00:00:00',
member enum('y','n') default 'n',
ip_address varchar(255) NOT NULL default '',
refurl varchar(255) NOT NULL default '',
user_agent varchar(255) default NULL,
PRIMARY KEY (session_id),
KEY session_id (session_id)
) TYPE=MyISAM;
Who’s Online Logger
Đặt đoạn mã này vào đầu mỗi trang của website bạn (include ấy)
<?php /** * Đếm số người online * vistt: http://code-now.com */ if (! isset($_SESSION['online'])) { @mysql_query("INSERT INTO ppl_online (session_id,activity,ip_address,refurl, user_agent) VALUES ('" .session_id(). "', now(), ‘{$_SERVER['REMOTE_ADDR']}', ‘{$_SERVER['HTTP_REFERER']}', ‘{$_SERVER['HTTP_USER_AGENT']}')"); $_SESSION['online'] = $online; // đăng ký một biến session } else { if (isset($_SESSION['first_name'])) { @mysql_query("UPDATE ppl_online SET activity=now(),member='y' WHERE session_id='" .session_id(). "'"); } // endif } // endifelse if (isset($_SESSION['online'])) { // nếu là registered. @mysql_query("UPDATE ppl_online SET activity=now() WHERE session_id='" .session_id(). "'"); } // endif
/* Sau 24h sẽ xóa nó. Vì table này sẽ phình ra rất lớn, so dump it. */ if (date('H') == 00) { // 00-23 hours. or ‘D' == ‘Sun' @mysql_query("TRUNCATE TABLE ppl_online"); // Xóa tất cả bản ghi. Nhanh hơn dùng DELETE. } // endif ?>
Hiển thị kết quả:
<?php /* Chỗ này sẽ include vào website của bạn để hiển thị số người online. */ // Phải chắc chắn rằng MySQL connection đã được khởi tạo nhé.
$limit_time = time() - 300; // 5 phút time out. 60 * 5 = 300
$sql = mysql_query("SELECT * FROM ppl_online WHERE
UNIX_TIMESTAMP(activity) >= $limit_time AND member='n'
GROUP BY ip_address") or die (mysql_error());
$sql_member = mysql_query("SELECT * FROM ppl_online WHERE
UNIX_TIMESTAMP(activity) >= $limit_time AND member='y'
GROUP BY ip_address") or die (mysql_error());
$visits = mysql_num_rows($sql);
$members = mysql_num_rows($sql_member);
echo "Guests Online: $visits<br/>";
echo "Members Online: $members<br/>";
?
Dòng này sẽ đặt time limit khi bắt đầu đếm
1. $limit_time = time() - 300;
Bạn có thể đặt thời gian timeout lớn hơn tùy thích. Đoạn script này dùng 5 phút thôi.
Query “$sql” sẽ lấy ra số bản ghi ở 5 phút cuối cùng mà không flagged as being a member và sẽ nhóm chúng lại theo IP address (Để tránh trường hợp vào rồi thoát ra rồi lại vào lại -> có thể khiến số người online của bạn không đúng)
Thằng query $sql_member cũng làm điều tương tự, chỉ khác là nó đếm số Members Online, không phải là Guests Online.
Bây giờ có thể sử dụng hàm mysql_num_rows() và echo ra thống kê của bạn
Tags: Counter Vistors Online, PHP








lexa Ranking:
ko bit nói gì ! Thanks một cái thoy ! bài viết rất bổ ích !
bao loi nhu the doa
Warning: mysql_query() [function.mysql-query]: Access denied for user ‘ODBC’@'localhost’ (using password: NO) in C:\AppServ\www\diaocvina\online.php on line 6
Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in C:\AppServ\www\diaocvina\online.php on line 6
Access denied for user ‘ODBC’@'localhost’ (using password: NO)
Warning: mysql_query() [function.mysql-query]: Access denied for user ‘ODBC’@’localhost’ (using password: NO) in C:\AppServ\www\diaocvina\online.php on line 6
=========> chưa có kết nối với cơ sỡ dữ liệu mà bạn tao ra đó
$server = ‘localhost’;
$username = ‘root’;
$password = ”;
$database = ‘db_online_couter’;// tên databate mà bạn tạo
mysql_connect(”$server”, “$username”, “$password”);
Gửi nhận xét: