كنترل پنل             جستجو               پرسشهای متداول            .:: آخرین پست‌های انجمن ::.            لیست اعضا            مدیران سایت             درجات        ورود
فهرست انجمن‌ها -> برنامه‌نويسي تحت وب -> زبان برنامه‌نويسي PHP
پاسخ دادن به این موضوع
نمايش تعداد کاربران online بوسيله PHP و MySQL
پست تاریخ: یکشنبه 24 دی 1385 - 14:08    
Gytyonline
مديريت كل انجمن‌ها
مديريت كل انجمن‌ها


پست: 899
عضو شده در: 14 شهریور 1384
محل سکونت: tehran
iran.gif


امتياز: 8184

عنوان: نمايش تعداد کاربران online بوسيله PHP خواندن مشخصات فردی ارسال پیام شخصی ارسال email

امروزه در بسياري از سايتهاي اينترنت مي توان مشخصات کاربراني که در حال مشاهده صفحات سايت مي باشند (و يا حداقل تعدا کاربران (online) را مشاهده نمود). در اين مقاله سعي داريم در ارتباط با نحوه انجام اين کار بوسيله زبان PHP و با استفاده از بانک اطلاعاتي MySQL بپردازيم و در ابتدا در ارتباط با الگوريتم چگونگي انجام اين کار بحث خواهيم کرد.
همانطور که مي دانيد هر يک از کاربران اينترنت داراي يک آدرس منحصر به فرد (به نام IP) مي باشند. ما نيز براي فهميدن تعداد کاربران online از همين آدرس به عنوان مشخصه هر کاربر استفاده مي کنيم. از طرفي از آنجايي که بعد از ارسال کامل هر صفحه براي کاربر ارتباط بين کاربر و سرويس دهنده از بين مي رود نمي توان از اينکه آيا کاربر هنوز در حال مشاهده آخرين صفحه اي که از سايت دريافت کرده مي باشد و يا نه، اطمينان حاصل کرد. به همين دليل براي انجام اين کار از يک پيش فرض زماني استفاده مي کنيم. به اين صورت که فرض مي کنيم هر يک از کاربران سايت هر صفحه اي را که در يافت مي کند، آنرا به مدت چند دقيقه (در اين مثال ۵ دقيقه) مشاهده مي کند. حال اگر قبل از سپري شدن اين زمان کاربر درخواست صفحه ديگري را ارسال نمايد به اين معنا است که اين زمان بايد مجددا براي مدت ۵ دقيقه تمديد گردد و در غير اين صورت مي توان اين طور تصور نمود که کاربر از سايت خارج شده است. و در پايان نيز به اين نکته اشاره مي کنم که براي نگهداري و بازيابي اطلاعات مربوط به کاربران از بانک اطلاعاتي MySQL استفاده مي کنيم. حال بعد از اطلاع از نحوه انجام اين کار مراحل عملي براي انجام اين کار را بترتيب مرور خواهيم نمود.

در ابتدا بايد با استفاده از نرم افزارهاي موجود براي مديريت بانکهاي اطلاعاتي MySQL مانند phpMyAdmin در بانک اطلاعاتي، table مورد نياز را ايجاد نمود. اين table (که در اين مثال با نام visitors ايجاد شده و مورد استفاده قرار مي گيرد) داراي سه فيلد (براي نگهداري ادرس IP، صفحه در حال مشاهده و زمان ارسال در خواست) مي باشد. بوسيله دستورات SQL زير مي توانيد اين table را ايجاد نماييد.
نقل قول:
CREATE TABLE `visitors` (
`time` varchar(10) default NULL,
`page` varchar(255) default NULL,
`ip` varchar(255) default NULL
) TYPE=MyISAM;
در مرحله بعد گفتيم که از آدرس IP به عنوان مشخصه مورد استفاده در شناسايي کاربران استفاده خواهيم نمود. براي اين کار بايد ابتدا بوسيله PHP، آدرس IP بازديد کننده را شناسايي نمود. در کد زير تابعي به زبان PHP قرار دارد که با استفاده از آن مي توانيد آدرس IP کاربري را که در خواست مشاهده صفحات سايت را داده است بدست آوريد.

<?
function GetIP() {
global $REMOTE_ADDR, $HTTP_X_FORWARDED_FOR;

$ip = "";
if ($HTTP_X_FORWARDED_FOR != "") {
$ip = $HTTP_X_FORWARDED_FOR;
} else {
$ip = $REMOTE_ADDR;
}
return $ip;
}
?>
و در مرحله نهايي بايد با استفاده از بانک اطلاعاتي مشخص کنيم که آيا اين کاربر براي اولين بار مراجعه نموده است و يا قبل از زمان در نظر گرفته شده (۵ دقيقه در اين مثال) درخواست ديگري داده است؟ و همچنين اطلاعات مربوط به اين درخواست را در بانک اطلاعاتي ذخيره کنيم. کد زير که به زبان PHP نوشته شده است اين کار را انجام خواهد داد.
نقل قول:
<?
function WriteVisitor($PAGE) {
$ip = GetIP();
$time = time() - 300;
DB_Execute("DELETE FROM `visitors` WHERE (`ip` = . $ip . )");
DB_Execute("DELETE FROM `visitors` WHERE (`time` < . $time . )");

$time = time();
DB_Execute("INSERT INTO `visitors` VALUES ( . $time . , . $PAGE . , . $ip . )");
}
?>
در اين تابع براي انجام queryهاي بانک اطلاعاتي از تابعي با نام DB_Execute استفاده شده است که کد آن را به زبان PHP در زير مشاهده مي نماييد.

<?
$DATABASE = array (
"server" => "localhost",
"port" => "3306",
"username" => "root",
"password" => "",
"database" => "WEBILIX"
);

function DB_Execute($query) {
global $DATABASE;

$DBLINK = mysql_connect($DATABASE["server"] . ":" . $DATABASE["port"], $DATABASE["username"], $DATABASE["password"]);
mysql_select_db($DATABASE["database"], $DBLINK);
$result = mysql_query($query);

return $result;
}
?>
به اين نکته توجه داشته باشيد که براي استفاده از اين تابع بايد حتما مشخصات مربوط به بانک اطلاعاتي خود را در اين کد تغيير دهيد.

حال به فرض آنکه در سايت صفحه اي با نام page.php داريد و همچنين کدهاي PHP نوشته شده در مطالب قبل را در يک فايل به نام visitors.php ذخيره نموده ايد با استفاده از کد زير خواهيد توانست مشخصات مربوط به درخواست کاربران براي مشاهده اين صفحه را ثبت نماييد.
نقل قول:
<?
include "./visitors.php";
WriteVisitor("page.php");
?>
و براي نوشتن تعداد کاربراي online نيز مي توانيد کد زير را در صفحات سايت قرار دهيد.

<?
$DBLINK = mysql_connect($DATABASE["server"] . ":" . $DATABASE["port"], $DATABASE["username"], $DATABASE["password"]);
mysql_select_db($DATABASE["database"], $DBLINK);
$result = mysql_query("SELECT * FROM `visitors`");
$ visitors_number = mysql_num_rows($result);

if($visitors_number == 1) {
print($visitors_number . "user online
");
} else {
print($visitors_number . " users online
");
}
?>

[ وضعيت كاربر: ]

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

پست تاریخ: یکشنبه 24 دی 1385 - 17:27    
maxpal97
سَرور ماست!
سَرور ماست!


پست: 855
عضو شده در: 23 مرداد 1384
محل سکونت: شیراز
blank.gif


امتياز: 8010

عنوان: خواندن مشخصات فردی ارسال پیام شخصی

<?
$DBLINK = mysql_connect($DATABASE["server"] . ":" . $DATABASE["port"], $DATABASE["username"], $DATABASE["password"]);
mysql_select_db($DATABASE["database"], $DBLINK);
$result = mysql_query("SELECT * FROM `visitors`");
$ visitors_number = mysql_num_rows($result);

if($visitors_number == 1) {
print($visitors_number . "user online
");
} else {
print($visitors_number . " users online
");
}
?>
من این قسمت را که می زنم ERORR میده .
YOU DONT PROMIZZIONAL IN THIS PLACE

[ وضعيت كاربر: ]

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

پست تاریخ: یکشنبه 24 دی 1385 - 18:24    
Gytyonline
مديريت كل انجمن‌ها
مديريت كل انجمن‌ها


پست: 899
عضو شده در: 14 شهریور 1384
محل سکونت: tehran
iran.gif


امتياز: 8184

عنوان: خواندن مشخصات فردی ارسال پیام شخصی ارسال email

maxpal97 جان فقط همین یه تیکه رو خطا می ده و بقیه جاها ریدیفه یا بقیه جاها هم Erorre میده Question Question Exclamation Exclamation Shocked

[ وضعيت كاربر: ]

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

پست تاریخ: یکشنبه 24 دی 1385 - 18:28    
maxpal97
سَرور ماست!
سَرور ماست!


پست: 855
عضو شده در: 23 مرداد 1384
محل سکونت: شیراز
blank.gif


امتياز: 8010

عنوان: خواندن مشخصات فردی ارسال پیام شخصی

وقت ندارم و سرم شلوغه . Wink فکر می کنم مشکل اساسی باشه و وقت زیادی بگیره .
اون بالا هم ارور میداد ولی ایگنور زدم . بی خیال اگه خواستم درست کنم میدم یکی از رفقا انجام بده .
دستت درد نکنه Razz

[ وضعيت كاربر: ]

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

پست تاریخ: یکشنبه 24 دی 1385 - 19:08    
maxpal97
سَرور ماست!
سَرور ماست!


پست: 855
عضو شده در: 23 مرداد 1384
محل سکونت: شیراز
blank.gif


امتياز: 8010

عنوان: خواندن مشخصات فردی ارسال پیام شخصی

دست شما درد نکنه من یادم رفته بود اصلا بجای یوزر و پسورد مال خودم را قرار بدم ... آفرين

تشکر مجدد ( راستی این بنر چی شد ) Wink

[ وضعيت كاربر: ]

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

پست تاریخ: یکشنبه 24 دی 1385 - 19:28    
Gytyonline
مديريت كل انجمن‌ها
مديريت كل انجمن‌ها


پست: 899
عضو شده در: 14 شهریور 1384
محل سکونت: tehran
iran.gif


امتياز: 8184

عنوان: خواندن مشخصات فردی ارسال پیام شخصی ارسال email

بابا حافظه یه جی 5 بخر(قابلی نداشت)
راستی کدوم بنر رو میگی
نقل قول:

دست شما درد نکنه من یادم رفته بود اصلا بجای یوزر و پسورد مال خودم را قرار بدم ...

تشکر مجدد ( راستی این بنر چی شد )

[ وضعيت كاربر: ]

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

پست تاریخ: یکشنبه 24 دی 1385 - 19:44    
Gytyonline
مديريت كل انجمن‌ها
مديريت كل انجمن‌ها


پست: 899
عضو شده در: 14 شهریور 1384
محل سکونت: tehran
iran.gif


امتياز: 8184

عنوان: خواندن مشخصات فردی ارسال پیام شخصی ارسال email

راستی یادم رفت بپرسم به کارت اومد و کار امد بور یا نه؟؟ Question Question Embarassed

[ وضعيت كاربر: ]

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

پست تاریخ: یکشنبه 24 دی 1385 - 23:48    
maxpal97
سَرور ماست!
سَرور ماست!


پست: 855
عضو شده در: 23 مرداد 1384
محل سکونت: شیراز
blank.gif


امتياز: 8010

عنوان: خواندن مشخصات فردی ارسال پیام شخصی

قاطی شد چرا این تاپیک ها .

خوب سر آدم که شلوغ باشه سوتی هم میده دیگه . آره حل شد . دست شما درد نکنه . Wink

[ وضعيت كاربر: ]

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


نمایش پستها:                 مشاهده موضوع قبلی :: مشاهده موضوع بعدی  
پاسخ دادن به این موضوع
 

صفحه 1 از 1

تمام زمانها بر حسب GMT + 3.5 Hours می‌باشند
 Related Topics 


 information 

 

پرش به:  
شما نمی توانید در این بخش موضوع جدید پست کنید
شما نمی توانید در این بخش به موضوعها پاسخ دهید
شما نمی توانید موضوع های خودتان را در این بخش ویرایش کنید
شما نمی توانید موضوع های خودتان را در این بخش حذف کنید
شما نمی توانید در این بخش رای دهید


Copyright 2004-2024. All rights reserved.
© by Aftabgardan Cultural Center : Aftab.cc