Chủ Nhật, 8 tháng 7, 2012

Đếm Số Người Truy Cập Web Bằng PHP-MySQL

Posted by Unknown Chủ Nhật, tháng 7 08, 2012, under | 3 comments

Vấn đề là chúng ta muốn đếm số người truy cập trang web của mình trong ngày, tuần, khách đang online thì làm sao ? Có 2 cách: 1 đang ký free account ở trang web cung cấp  modun đếm người .; 2. tự code . Mình có Demo tự code đếm số người truy cập web , thực hiện trình tự như sau:
1. Tạo file"connect.php", file này sẽ kết nối CSDL với MySQL, tự tạo ra  CSDL "online", bảng DL "counter" ,nội dung file như sau:
<?php
$db_host = 'localhost'; // localhost / ip
$db_user = 'root';// tai khoan Admin
$db_pass = ''; // pass dang nhap
$db_data = 'shopping'; // ten database 

// thực hiện kết nối và kiểm tra có thành công hay không
if ($conn = @mysql_connect($db_host, $db_user, $db_pass)) {
    // nếu thành công, thực hiện chọn CSDL
    if (!@mysql_select_db($db_data)) {
        // nếu chọn thất bại, tiến hành tạo CSDL và tạo bảng.
        mysql_query('CREATE DATABASE `' . $db_data . '` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci');
        mysql_select_db($db_data);
        mysql_query('CREATE TABLE IF NOT EXISTS `counter` (
                `ip_address` varchar(15) NOT NULL,
                `last_visit` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
                KEY `ip_address` (`ip_address`)
        ) ENGINE=InnoDB DEFAULT CHARSET=latin1;');
    }
} else {
    // thông báo lỗi nếu không kết nối CSDL được.
    die(mysql_error());
}
?>
2. Tạo file "counter.php", file có nhiệm vụ lấy IP máy khách rồi  gửi về Server , lấy CSDL in ra  trình duyệt, nội dung file như sau:
 <meta http-equiv="content-type" content="text/html;charset=utf-8" />

<?php
$time_now = time();    // lưu thời gian hiện tại
$time_out = 60; // khoảng thời gian chờ để tính một kết nối mới (tính bằng giây)
$ip_address = $_SERVER['REMOTE_ADDR'];    // lưu lại IP của kết nối


require_once('connect.php');    // nhúng file kết nối CSDL vào

// kiểm tra xem thời gian hiện tại so với lần truy cập cuối có lớn hơn khoảng thời gian chờ không
    //- nếu không thì thôi
    //- nếu có thì thêm vào như là một kết nối mới
if (!mysql_num_rows(mysql_query("SELECT `ip_address` FROM `counter` WHERE UNIX_TIMESTAMP(`last_visit`) + $time_out > $time_now AND `ip_address` = '$ip_address'")))
    mysql_query("INSERT INTO `counter` VALUES ('$ip_address', NOW())");

// đếm số người đang online
$online = mysql_num_rows(mysql_query("SELECT `ip_address` FROM `counter` WHERE UNIX_TIMESTAMP(`last_visit`) + $time_out > $time_now"));

// đếm số người ghé thăm trong ngày (từ 0h ngày hôm đó đến thời điểm hiện tại)
$day = mysql_num_rows(mysql_query("SELECT `ip_address` FROM `counter` WHERE DAYOFYEAR(`last_visit`) = " . (date('z') + 1) . " AND YEAR(`last_visit`) = " . date('Y')));

// đếm số người ghé thăm ngay hôm qua 
$yesterday = mysql_num_rows(mysql_query("SELECT `ip_address` FROM `counter` WHERE DAYOFYEAR(`last_visit`) = " . (date('z') + 0) . " AND YEAR(`last_visit`) = " . date('Y')));

// đếm số người ghé thăm trong tuần (từ 0h ngày thứ 2 đến thời điểm hiện tại)
$week = mysql_num_rows(mysql_query("SELECT `ip_address` FROM `counter` WHERE WEEKOFYEAR(`last_visit`) = " . date('W') . " AND YEAR(`last_visit`) = " . date('Y')));

// đếm số người ghé thăm tuần trước
$lastweek = mysql_num_rows(mysql_query("SELECT `ip_address` FROM `counter` WHERE WEEKOFYEAR(`last_visit`) = " . (date('W') - 1). " AND YEAR(`last_visit`) = " . date('Y')));

// đếm số người ghé thăm trong tháng
$month = mysql_num_rows(mysql_query("SELECT `ip_address` FROM `counter` WHERE MONTH(`last_visit`) = " . date('n') . " AND YEAR(`last_visit`) = " . date('Y')));

// đếm số người ghé thăm trong năm
$year = mysql_num_rows(mysql_query("SELECT `ip_address` FROM `counter` WHERE YEAR(`last_visit`) = " . date('Y')));

// đếm tổng số người đã ghé thăm
$visit = mysql_num_rows(mysql_query("SELECT `ip_address` FROM `counter`"));


echo '<pre>' .'<br />' .'<br />' .
     ' Đang online: ' . $online . '<br />' .
     ' Hôm nay: ' . $day . '<br />' .
     ' Hôm qua: ' . $yesterday . '<br />' .
     ' Tuần này: ' . $week . '<br />' .
     ' Tuần trước: ' . $lastweek . '<br />' .
     ' Tháng này: ' . $month . '<br />' .
     ' Năm nay: ' . $year . '<br />' .
     ' Lượt truy cập: ' . $visit .
     '</pre>';
?> 

3. Tạo file"index.php" , file này có nhiệm vụ include file counter  ( nếu muốn kết quả đếm hiện ở đâu thì đặt " <?php include("counter.php"); ?>  ở đó ), nội dung  file như sau:
<?php
include("counter.php"); 
?>


4. Demo:
Hình minh họa :







Xem Nhiều

Bài đăng phổ biến

Lưu trữ blog

Blog Archive