Viết chương trình đếm số người online bằng PHP

Cỡ chữ: Decrease font Enlarge font

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: ,

Add to: Add to your del.icio.us Digg this story Add to your Twitter Add to your Google Bookmark Add to your Facebook Add to your MySpace
Số lượt xem: 3862
trung hieu on August 16th, 2009, 4:06 pm

ko bit nói gì ! Thanks một cái thoy ! bài viết rất bổ ích !

huynh minh le on April 27th, 2010, 9:27 am

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)

huỳnh đức lợi on July 12th, 2010, 5:55 pm

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:comment

 *
 *