نمایش تعداد افراد آنلاین

August 5, 2005 at 02:19 pm

در اکثر برنامه های جامع شمارش بازدیدکننده، قابلیت نمایش افرادی که آنلاین هستند تعبیه شده. ما در اینجا قصد نداریم اسکریپتی را معرفی کنیم که بلافاصله پس از دریافت، آن را به سرویس دهنده خود منتقل و از آن استفاده کنید. جنبه ی آموزشی ساختار این اسکریپت و نحوه کارش برایمان مهم است. (سطح مقاله: مبتدی و کمی بالاتر از آن) به راحتی می توان اطلاعات مربوط به این اسکریپت را در یک فایل متنی ذخیره نمود اما برای انعطفاف پذیری و قدرت مانور بیشتر از بانک اطلاعاتی MySQL استفاده می کنیم. در ابتدای کار برای ساخت این جدول کدهای SQL زیر را در بانک اطلاعاتی خود وارد کنید:

CREATE TABLE online_count ( 
ip char(15) NOT NULL, 
TMP timestamp(14), 
PRIMARY KEY (ip) 
);

واضح است که این کدها یک جدول به نام online_count با دو فیلد، یکی برای زمان و دیگری برای آدرس ip ایجاد می کند. بخش اصلی این اسکریپت به شکل زیر است:

<?php
$Host = "localhost"; //Host name
$User = "root"; // Username
$Mdp  = "alvan"; // Password
$Base = "test"; // Database Name

mysql_connect ( $Host , $User , $Mdp );

//Timeout in seconds
$TimeOut = 60;

$ip = getenv( "REMOTE_ADDR" );

$Requete = "DELETE FROM online_count WHERE TMP < now()";
$Resultat = mysql_db_query( $Base , $Requete );
$Requete = "SELECT count(*) FROM online_count WHERE ip='$ip'";
$Resultat = mysql_db_query( $Base , $Requete );

while ( $T = @mysql_fetch_array( $Resultat ) ) {
    $Compteur = $T&#91;"count(*)"&#93;;
}

if ( $Compteur ) {
    $Requete = "UPDATE online_count SET TMP=TMP + $TimeOut WHERE ip='$ip'";
} else {
    $Requete = "INSERT INTO online_count (ip, TMP) VALUES ('$ip', now()+ $TimeOut)";
}

$Envoi = mysql_db_query( $Base , $Requete );

$Requete = "SELECT count(*) FROM online_count";
$Envoi = mysql_db_query( $Base , $Requete );

while ( $T = @mysql_fetch_array( $Envoi ) ) {
    $Compteur = $T&#91;"count(*)"&#93;;
}

echo $Compteur;
?>

خط 2 تا 5 پارامترهای اتصال به پایگاه داده است که باید مقدار دهی شوند (توضیحات جلوی پارامترها مشخص می کند هر کدام مربوط به چه هستند) روش کار این اسکریپت به این شرح است که ابتدا آدرس IP ماشین در متغیر ip ذخیره می شود(12) چنانچه زمان رکورد شده در فیلد زمان، کمتر از زمان کنونی باشد، مشخصه آن آدرس پاک خواهد شد(14-15) بنابراین نگران افزایش حجم جدول نباشید.

البته توجه داشته باشید که زمان رکورد شده در فیلد، زمان کنونی بعلاوه پیش فرض 60 ثانیه خواهد بود که بعنوان Timeout انتخاب شده و مقدار آن قابل تنظیم است. حال یک ساختار شرطی ایجاد می کنیم، چنانچه ip مربوط به همان ماشین قبلی بود رکوردهای ضبط شده را آپدیت می کنیم در غیر اینصورت یک مشخصه جدید در جدول ایجاد خواهد شد(23-27) در انتهای کار با شمردن تعداد ردیف های جدول با استفاده از حلقه While، تعداد کاربران آنلاین در آن زمان را نمایش می دهیم. علاوه بر این خودتان می توانید براحتی بخش هایی مضاف بر این، بدان اضافه کنید.

فکر نکنم نیازی به تحلیل و بررسی یک به یک توابه بکار رفته شده باشد چون در پست های قبلی مفصل در موردشان بحث شده است. تنها در مورد تابع mysql_fetch_array که بسیار پرکاربرد است بدانید که، این تابع عموما درون حلقه قرار می گیرد و کارش این است که با هربار تکرار حلقه، یک سطر از اطلاعات دریافت شده، به صورت یک آرایه در متغیر مربوط به آن (که در این تمرینT است) ذخیره می شود. این روند تا آخرین سطر از اطلاعات درون جدول ادامه پیدا می کند.

دسته: پی اچ پی | نویسنده: مرتضی الوانی
  1. 23 نظر برای این مطلب ارسال شده است. نظر خود را ارسال کنيد »

  1. 1

    میلاد قیصری


    سلام حاجی!!
    خیلی جالب بود!
    ادامه!!

    August 5, 2005 at 4:22 pm

  2. 2

    مملی آنلاین


    سلام
    خیلی باحال بود موفق باشی !
    یک سری هم به ما بزن

    August 5, 2005 at 10:00 pm

  3. 3

    جيك و پيك


    تنكس الات

    August 5, 2005 at 10:20 pm

  4. 4

    emad.h


    سلام…مرسی استفاده خواهیم کرد

    August 6, 2005 at 12:00 am

  5. 5

    Amir Azemati


    ممنون. یه موردی. حالا اگه بخواهیم که تعداد افراد آنلاین در همون صفحه نشون داده نشه و در یک جای دیگه نشون داده بشه! یک صفحه ی اختصاصی برای این کار مثلا. در این حالت باید چه کرد!؟ چون من یک کارهایی کردم ولی نشد ( اون چاپ تعداد افراد رو از کدها حذف کردم، فایل رو در یک صفحه‌ی دیگه اینکلود کردم و اونجا تعداد افراد رو چپ کردم! اشتباه بوده کارم!؟ )

    August 6, 2005 at 12:33 pm

  6. 6

    lachin


    بازم مثل هميشه گل کاشتی
    ای ولته

    August 7, 2005 at 10:34 am

  7. 7

    ساحل خانی


    من ميخواستم بدونم اگه بخواهيم تعداد بازديد کننده های هفته قبل و ماه قبل را بدونيم چه کار بايد کرد
    من برنامه ای برای بازديد کننده های امروز ،ديروز و آن لاين و مجموع نوشتم و ميخواهم همان را توسعه بدم.

    August 8, 2005 at 10:14 am

  8. 8

    سوبارو


    خیلی جالب بود… حالا ما که بازدید کنندمون کمه… بزار زیاد بشه اونوقت میزاریم… .

    August 10, 2005 at 6:33 pm

  9. 9

    مصطفي حيدري


    bebakhshid ke soalam ra dar een ghesmat matrah kardam va rabty be mataleb nadarad
    mikhastam begam ke man easy php ra nasb kardam valy vaghty barnamee minevisam ghesmathaee ke

    August 11, 2005 at 1:58 pm

  10. 10

    حمید برغمدی


    مرتضی سلام
    حالت خوب است واقعا وبلاگ مفیدی داری
    الان از کرمان دارم این پیغام را برایت می فرستم کمتر از 20ساعت دیگر به پرواز نمانده امیدوارم که دعای شما بدرقه راهمان باشد
    با تشکر حمید بر غمدی

    August 15, 2005 at 10:33 am

  11. 11

    Amirreza


    خیلی عالی بود.
    اگه وقت کردین یه مقاله خوب درباره سیستم عضوگیری بذارید.
    آخه من هر جا رفتم مقاله هاش ناقص بود!

    January 1, 2006 at 10:59 pm

  12. 12

    محمد


    من می خوام یه چیزی بسازم که هرکی تو سایت یا وبلاگش گزاشت بگه چند نفر الان آنلاین هستن !

    November 27, 2006 at 12:30 am

  13. 13

    علی


    سلام
    یک سئوال دارم شاید جاش تو این صفحه نباشه ولی خاهش می کنم جواب بدین .
    من می خوام تو کدهای برای php به جای mysql یا sql از access استاده کنم چهطوری می تونم این کار و بکنم واگه ممکنه یک نمونه کد برام به ایمیلم بفرستین

    درضمن میخواستم بدونم اگه تو mysql رکورد فارسی داشته باشیم چطور می شه بدون مشکل تو فونتش به اون دسترسی داشت
    با تشکر

    July 14, 2007 at 7:52 pm

  14. 14

    ایمان


    سلام
    چطور میشه این کد رو برای سایتهای دیگه به کار برد
    مثل سرویس دهی Free online user
    با تشکر

    September 13, 2007 at 8:59 am

  15. 15

    ُجاد حسینیان


    سلام منم می خوام بدونم میشه با این افراد آنلاین دهی راه انداخت اگه می شه چی کار کنم

    March 1, 2008 at 2:35 am

  16. 16

    1ضرب


    سلام
    ضمن تشکر از آقای الوانی؛
    دوستانی که می خواستند با این کد ، سیستم سرویس افراد آنلاین ، راه بیاندازند توجه کنند که اصلا با همچنین کدهایی نمیشه چنین کاری کرد!

    May 8, 2008 at 10:16 am

  17. 17

    فرهاد اصغرزاده


    مرسی مرتضی جان. عالی بود/

    برای نمایش تعداد کاربران آنلاین در جای دیگر باید این فایل را اینکود کرد

    November 18, 2008 at 8:49 pm

  18. 18

    تبليغ باشي


    ممنون عالي بود
    سايتي نيست كه آدرس سايت مورد نظر را بگيرد و تعداد افراد آنلاين را نشان بدهد؟؟

    December 7, 2008 at 12:15 pm

  19. 19

    omid


    thanks

    March 16, 2009 at 12:46 pm

  20. 20

    عرفان


    veri veri good

    August 30, 2010 at 12:27 am

  21. 21

    علیرضا


    باسلام
    خیلی مفیدبود.استفاده کردم
    موفق باشید

    July 30, 2013 at 1:24 pm

  22. 22

    طراحی سایت


    سلام
    خیلی ممنون
    اگر بخوام که آمار های ذیگه مثلا
    دیروز
    هفته قبل
    و ماه گذشته و غیره
    رو نشون بده
    ممنون میشم راهنمایی کنید

    May 18, 2014 at 3:17 pm

  23. 23

    طراحی سایت


    ممنون از سایت خوبتون

    December 19, 2015 at 3:32 pm