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

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

Written By 1 on Chủ Nhật, 8 tháng 7, 2012 | 05:33

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 = '127.0.0.1'; // localhost / ip/ domain$db_user = 'root';// tài khoản Admin$db_pass = ''; // pass đăng nhập$db_data = 'online'; // tên database 
// thực hiện kết nối và kiểm tra có thành công hay khôngif ($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:

<?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ớiif (!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)// z- là số thứ tự ngày trong năm, năm đây là năm có 365 ngày$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 ngày hôm qua// . (date('z') +1+ 0) .  =  . (date('z') + 1 ) .  =>  . (date('z') + 1 - 1 ) . = . (date('z') + 0) .// lùi lại 1 ngày nên trừ đi 1$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 rồi//. date('W') . =. (date('W') ). =. (date('W') + 0 ).  => . (date('W') + 0 -1 ). . (date('W')  -1 ). // lùi lại 1 tuần nên trừ 1$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>' .     ' Đang online : ' . $online . '<br />' .     ' Hôm nay : ' . $day . '<br />' .     ' Hôm qua : ' . $yesterday . '<br />' .     ' Tuần này : ' . $week . '<br />' .     ' Tuần rồi : ' . $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:
<?phpinclude("counter.php"); ?>

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




0 nhận xét:

Đăng nhận xét