PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : نمايش تعداد کاربران online بوسيله PHP



Borna66
4th July 2012, 11:50
امروزه در بسياري از سايتهاي اينترنت مي توان مشخصات کاربراني که در حال مشاهده صفحات سايت مي باشند (و يا حداقل تعدا کاربران (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;
</span>
در مرحله بعد گفتيم که از آدرس 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;
}
?>
</span>

به اين نکته توجه داشته باشيد که براي استفاده از اين تابع بايد حتما مشخصات مربوط به بانک اطلاعاتي خود را در اين کد تغيير دهيد.

حال به فرض آنکه در سايت صفحه اي با نام 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
");
}
?>