آی میتران

تجربه یک آنلاین متفاوت

ذخیره سازی مشخصات بازدید کنندگان با php

ذخیره سازی مشخصات بازدید کنندگان با php

سلام وقت بخیر

ذخيره سازی مشخصات بازديد کنندگان بر روی فايل ساده:

اين مقاله به عزيزاني كه ميخواهند اطلاعاتي در مورد سيستم بازديدكننده هاي سايت خود به دست آورند كمك بزرگي خواهد كرد. وقتي شما هزينه اي را براي گرفتن فضا پرداخت كرده ايد و از يك فضا بر روي يك سرور استفاده ميكنيد نميتوانيد از فايلهاي Log سرور استفاده نماييد، اگر سرور در اختيار خودتان باشد اين كار امكان پذير است و حتي اطلاعات مفيدي نيز ذخيره ميشود، ولي وقتي سرور در اختيارتان نباشد ميبايست از طريق برنامه نويسي اقدام به اينكار نماييد ، در اين مقاله به بررسي برنامه نويسي اين سيستم توسط PHP خواهيم پرداخت. با استفاده از اين روش ميتوانيد آماري از ترافيك سايتتان را بدست آوريد و همچنين متوجه شويد كه كاربر از كجا به سايتتان آمده و چه صفحاتي را مشاهده كرده اند. با خواندن اين مقاله ميتوانيد اعمال فوق را بدون استفاده از بانكاطلاعاتي MYSQL انجام دهيد، ما فقط به يك فايل متني معمولي براي ذخيره ترافيك استفاده ميكنيم و دو متد را مورد بررسي قرار ميدهيم. اولين متد در رابطه با session منحصر به فرد هر كاربر و دومين متد در رابطه با اطلاعات وارد شدن كاربران به همه صفحات ميباشد. در اين مقاله علاوه بر مرور اين سيستم ، اطلاعات مناسبي در مورد متغيرهاي از پيشتعريف شده در PHP در اختیار شما قرار خواهد گرفت.

متد1 (Session Logging) :

با استفاده از اين متد ميتوانيد اطلاعات منحصر به فرد در بازديد كننده سايت را بدست آوريد:

<?php
session_start();
if(!session_is_registered('counted')){
$agent = $_SERVER['HTTP_USER_AGENT'];
$uri = $_SERVER['REQUEST_URI'];
$user = $_SERVER['PHP_AUTH_USER'];
$ip = $_SERVER['REMOTE_ADDR'];
$ref = $_SERVER['HTTP_REFERER'];
$dtime = date('r');
if($ref == ""){
$ref = "None";
}
if($user == ""){
$user = "None";
}
$entry_line = "$dtime - IP: $ip | Agent: $agent | URL: $uri | Referrer: $ref | Username: $user
n";
$fp = fopen("logs.txt", "a");
fputs($fp, $entry_line);
fclose($fp);
session_register('counted');
}
?>

اجازه دهيد كه در مورد سورس كد بالا كمي صحبت كنيم:

<?php
session_start();
?>

با استفاده از این دستور به PHP اعلام می کند که session فردی را آماده کند که ما اطلاعات مرورگر و سیستم او را بدست آوردیم.

<?php
if(!session_is_registered('counted')){
?>

در اين كد ما session مورد نظر را چک می کنیم که اگر قبلا session  با نام counted وجود نداشته باشد دستورات داخل شرط اجرا شود و اطلاعات سیستم کاربر ذخیره شود.

<?php
$agent = $_SERVER['HTTP_USER_AGENT'];
$uri = $_SERVER['REQUEST_URI'];
$user = $_SERVER['PHP_AUTH_USER'];
$ip = $_SERVER['REMOTE_ADDR'];
$ref = $_SERVER['HTTP_REFERER'];
$dtime = date('r');
?>

كدهاي بالا همان متغيرهاي از پيش تعريف شده هستند كه توسط خود PHP براي ما فراهم شده اند و ميتوانيم از آنها استفاده كنيم. در ادامه در مورد هر كدام از اين متغيرهاي از پيش تعريف شده ، توضيح كمي خواهم داد.

<?php
$agent = $_SERVER['HTTP_USER_AGENT'];
?>

نوع مرورگر را نشان می دهد.

<?php
$uri = $_SERVER['REQUEST_URI'];
?>

URL صفحه ای که کاربر در آن است را نشان می دهد.

<?php
$ip = $_SERVER['REMOTE_ADDR'];
?>

آدرس IP کامپیوتر مورد نظر را برمی گرداند.

<?php
$ref = $_SERVER['HTTP_REFERER'];
?>

توسط این تابع مشخص می شود کاربر از چه سایتی به سایت ما هدایت شده است.

<?php
$dtime = date('r');
?>

اين دستور فقط يك ساختار تاريخي است كه زمان دسترسي كاربر به سايت را در متغير dtime ذخیره می کند.

<?php
if(!$ref){
$ref = "None";
}
if(!$user){
$user = "None";
}
?>

بعد از قرار دادن متغيرهاي از پيش تعريف شده در متغيرهاي برنامه در كد بالا، ميتوانيم متغيرهايي كه مقاديري در آن قرار نگرفته شناسايي كرده و مقدار None را در آن ها قرار می دهیم.

<?php
$entry_line = "$dtime - IP: $ip | Agent: $agent | URL: $uri | Referrer: $ref | Username: $user n";
$fp = fopen("logs.txt", "a");
fputs($fp, $entry_line);
fclose($fp);
session_register('counted');
?>

در دستورات بالا مقادير بدست آورده از سيستم كاربران را در يك فايل متني ذخيره ميكنيم. در متغير entry_line مشخص ميكنيم كه چه اطلاعاتي در فايل ذخيره شود و اين اطلاعات را در ابتدا در اين متغير ذخيره ميكنيم، اين اطلاعات ميتواند تغيير داده شود و به دلخواه خودتان اطلاعات مورد نظر ذخيره شود. در خط بعدي با استفاده از دستور fopen يك فايل متني را انتخاب كرده و آن را در حالت درج اطلاعات قرار ميدهيم و مقدار را در يك اشاره گر فايل که متغیر fp ميباشد قرار ميدهيم. در خط بعد با استفاده از تابع fputs در پارامتر اول اشاره گر فايل و در پارامتر دوم متغيري را كه حاوي مقداري است كه مايل به ذخيره سازي در فايل ميباشيم را قرار ميدهيم. در خط بعدي و با تابع fclose فايل مورد نظر را ميبنديم و در خط بعدي يعني session_register باعث ميشود كه مشخص گردد كه اطلاعات اين كاربر ذخيره شده است كه مجددا اقدام به ذخيره سازي اطلاعات اين كاربر نكند.

تا اينجا تمام موارد مربوط به متد ١ و ذخيره اطلاعات منحصر به فرد هر كاربر ميباشد. حال به بررسي متد ٢ ميپردازيم.

متد 2 (All Page Logging) :

در اين روش هر صفحه اي كه مورد بازديد قرار ميگيرد اطلاعات را ثبت ميكند، اين متد بسيار شبيه متد ١ ميباشد با اين تفاوت كه session را از سورس برنامه حذف ميكنيم. البته روشمتد ٢ هميشه مناسب نيست چون كه بسرعت باعث افزايش حجم فايل Log می گردد.

 

<?php
$agent = $_SERVER['HTTP_USER_AGENT'];
$uri = $_SERVER['REQUEST_URI'];
$user = $_SERVER['PHP_AUTH_USER'];
$ip = $_SERVER['REMOTE_ADDR'];
$ref = $_SERVER['HTTP_REFERER'];
$dtime = date('r');
if($ref == ""){
$ref = "None";
}
if($user == ""){
$user = "None";
}
$entry_line = "$dtime - IP: $ip | Agent: $agent | URL: $uri | Referrer: $ref | Username: $user
n";
$fp = fopen("logs.txt", "a");
fputs($fp, $entry_line);
fclose($fp);
?>

همانطور كه متوجه شده ايد كدهاي زير از سورس كد اصلي حذف شده اند.

<?php
session_start();
if(!session_is_registered('counted')){
session_register('counted');
}
?>

در پايان بد نيست كمي در مورد تنظيمات فايل Log صحبت کنیم. در ابتدا شما ميبايست يك فايل خالي به وب سرور خود ارسال كنيد و سعي كنيد در اشاره گر فايل متیغر fp آدرس کامل فایل را مثل www/htdocs/logs.txt وارد نمایید. بعد از انجام این عملیات در نهایت با اجرای دستور CHMOD 755 روی فایل Permission لازم را ایجاد نمایید.

* اگر با دیتابیس آشنا هستید می توانید بجای نوشتن داخل فایل، اطلاعات خود را در دیتابیس ذخیره نمایید با این کار خواندن و نوشتن اطلاعات سریعتر و اصولی تر خواهد شد.




مهران ایمانی هستم فارغ التحصیل رشته برق قدرت. عاشق طراحی در زمینه برق ، سایت و همچنین کد نویسی به زبان php هستم. امیدوارم بتونم دانشی رو که دارم از طریق آی میتران به اشتراک بذارم.

ارسال یک نظر جدید

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