آموزش ساخت آمارگیر (کاربران آنلاین)

PHP

توسط reza-irdev در 4 سال پیش
0 882 1 4 سال پیش
reza-irdevc0der
0

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

[color=#006400]مرحله اول - ساخت جدول[/color] برای شروع باید یک table با نام "online_users" در دیتابیستون ایجاد کنید، برای اینکار از کد زیر استفاده کنید:

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

[color=#006400]مرحله دوم -استفاده از کلاس[/color] حالا فقط کافیه از کلاس SA_USERSONLINE استفاده کنید:

<?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);
    }
}

?>

[color=#0000FF]نحوه استفاده[/color]

$usersOnline = new SA_USERSONLINE();
echo 'Online users: ', $usersOnline->get_online_users();

به همین راحتی قسمت کاربران آنلاین سایت درست شد! :winksmiley02:

[color=#FF0000]نکات:[/color]1- اگر اتصال به دیتابیس در فایلهای دیگه برقرار شده و شامل این فایل هم میشه دیگه نیازی به اتصال مجدد نیست پس میتونید لاین های 34 و 35 رو حذف کنید :

$this->link = mysqli_connect($this->DB_HOST, $this->DB_USER, 
                $this->DB_PWD, $this->DB_NAME);

2- timeout بصورت پیشفرض روی 10 دقیقه تنظیم شده اما قابل تغییر هست:

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

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

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

0

بسیار عالی و کاربردی بود مهندس ممنون

آخرین ویرایش: 06-09-2014 ساعت 17:41، توسط C0der

خوش آمدید

برای طرح سوال، ایجاد بحث و فعالیت در سایت نیاز است ابتدا وارد حساب کاربری خود شوید. در صورتی که هنوز عضو سایت نیستید میتوانید در عرض تنها چند ثانیه ثبت نام کنید.

لطفا ابتدا لاگین کنید