آموزش ساخت آمارگیر (کاربران آنلاین)
#1
Note 
سلام
اگر شما هم وبسایتی دارید یا مشغول طراحی سایت هستید احتمالا قسمت آمار سایت براتون مهمه و یکی از بخشهای سخت آمارگیر بنظر میرسه بخش کاربران آنلاین باشه.
تو این اموزش میتونید براحتی از کلاسی که برای شما آماده کردیم برای نمایش کاربران آنلاین در سایتتون استفاده کنید.

مرحله اول - ساخت جدول
برای شروع باید یک table با نام "online_users" در دیتابیستون ایجاد کنید، برای اینکار از کد زیر استفاده کنید:

کد:
CREATE TABLE `online_users` (
`session_id` char(150) NOT NULL,
`last_activity` int(11) NOT NULL default '0'
);

مرحله دوم -استفاده از کلاس
حالا فقط کافیه از کلاس SA_USERSONLINE استفاده کنید:
کد php:
<?php

/*
 * Author : Reza Ramezanpour <reza.irdev@gmail.com> 
 * Website: http://softafzar.net
 */
 
class SA_USERSONLINE
{

    protected 
$DB_HOST 'localhost';

    protected 
$DB_NAME 'test';

    protected 
$DB_USER 'root';

    protected 
$DB_PWD '';

    protected 
$session_id null;

    protected 
$time null;

    protected 
$timeout 15;

    protected 
$link null;

    protected 
$stmt null;

    function 
__construct ()
    {
        
session_start();
        
$this->session_id session_id();
        
$this->time time();
        
$this->link mysqli_connect($this->DB_HOST$this->DB_USER
                
$this->DB_PWD$this->DB_NAME);
    }

    
/**
     * Gets current online users
     */
    
function get_online_users ()
    {
        
$this->delete_update_onlineusers();
        
$this->insert_onlineusers();
        
$this->stmt mysqli_query($this->link
                
'SELECT session_id FROM online_users');
        return 
mysqli_num_rows($this->stmt);
    }

    function 
already_registred ()
    {
        
$this->stmt mysqli_query($this->link
                
"SELECT session_id FROM online_users WHERE session_id='$this->session_id'");
        if (! 
$this->stmt || mysqli_num_rows($this->stmt) <= 0)
            return 
false;
        return 
true;
    }

    function 
insert_onlineusers ()
    {
        if (! 
$this->already_registred()) {
            
mysqli_query($this->link
                    
"INSERT INTO online_users VALUES('$this->session_id',$this->time)");
        }
    }

    function 
delete_update_onlineusers ()
    {
        
$timeout $this->time - ($this->timeout 60);
        
mysqli_query($this->link
                
"DELETE FROM online_users WHERE last_activity<=$timeout");
        
mysqli_query($this->link
                
"UPDATE online_users SET last_activity=$this->time WHERE session_id='$this->session_id'");
    }

    
/**
     * Set timeout in minutes.
     * 
     * @param int $timeout            
     */
    
function set_timeout ($timeout)
    {
        
$this->timeout = ((int) $timeout);
    }
}

?>
نحوه استفاده
کد php:
$usersOnline = new SA_USERSONLINE();
echo 
'Online users: '$usersOnline->get_online_users(); 
به همین راحتی قسمت کاربران آنلاین سایت درست شد! :winksmiley02:

نکات:
1- اگر اتصال به دیتابیس در فایلهای دیگه برقرار شده و شامل این فایل هم میشه دیگه نیازی به اتصال مجدد نیست پس میتونید لاین های 34 و 35 رو حذف کنید :
کد php:
$this->link mysqli_connect($this->DB_HOST$this->DB_USER
                
$this->DB_PWD$this->DB_NAME); 

2- timeout بصورت پیشفرض روی 10 دقیقه تنظیم شده اما قابل تغییر هست:
کد php:
$usersOnline->set_timeout(20); 
* timeout مشخص میکنه که بعد از چند دقیقه کاربر از لیست انلاینها حذف بشه. مثلا اگر timeout رو روی 20 دقیقه تنظیم کنید در صورتی که کاربر برای 20 دقیقه فعالیتی نداشته باشه از لیست حذف میشه.

3- برای اینکه متوجه بشید چطور کار میکنه میتونید صفحه وب رو با مرورگرهای مختلف باز کنید یا توی سایتتون بذارید و نتیجه رو ببینید.

امیدوارم بدردتون بخوره.
موفق باشید.

پاسخ
#2
Note 
بسیار عالی و کاربردی بود مهندس
ممنون

آخرین ویرایش: 06-09-2014 ساعت 17:41، توسط C0der
پاسخ
ایجاد موضوع جدید   پاسخ به موضوع  

موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Note آموزش MVC به زبان ساده (تصویری) Daniel 1 805 16-08-2016 ساعت 09:24
آخرین ارسال: aaiz
Note آموزش MVC Daniel 1 680 26-11-2015 ساعت 12:56
آخرین ارسال: bkk
Note کتاب آموزش PHP از مقدماتی تا پیشرفته Stack OverFlow 0 995 16-02-2015 ساعت 10:48
آخرین ارسال: Stack OverFlow
Note آموزش ساخت صفحه بندی در php pHp king 2 1,088 18-05-2014 ساعت 15:34
آخرین ارسال: pHp king
Note آموزش مقدماتی php (کتاب) PHP.sec 0 360 16-03-2014 ساعت 21:25
آخرین ارسال: PHP.sec
Note آموزش PHP از مقدماتی تا پیشرفته Stack OverFlow 0 364 28-02-2014 ساعت 16:23
آخرین ارسال: Stack OverFlow
Note آموزش Regex IranPhp 1 395 09-02-2014 ساعت 18:29
آخرین ارسال: PHP.sec
Note آموزش گذاشتن کپچا(Captcha) در سایت SOFTAFZAR 1 1,276 06-02-2014 ساعت 22:46
آخرین ارسال: Wp script
Note آموزش ساخت نسخه موبایل برای سایت SOFTAFZAR 0 440 27-01-2014 ساعت 15:24
آخرین ارسال: SOFTAFZAR
Note آموزش Laravel (قسمت سوم) Daniel 0 765 24-01-2014 ساعت 17:39
آخرین ارسال: Daniel

کاربرانِ درحال بازدید از این موضوع:   1 مهمان