شمارنده آمار بازديد

نظر شما درباره اين آموزش

  • متوسط

    رای: 0 0.0%
  • ضعيف

    رای: 0 0.0%
  • بد

    رای: 0 0.0%

  • مجموع رای دهندگان
    2

MMSHFE

Member
با سلام، دوستان گرامي خواستم بعد از اينهمه آموزش ساخت كد شمارنده سايت كه هر كدوم يك روش رو پيشنهاد ميكنن، من هم روش خودم رو بگم كه چند ساله دارم استفاده ميكنم و علاوه به انعطاف پذيري بالايي كه داره، حجم ديتابيس رو هم بالا نميبره. خوب مستقيم ميريم سراغ كد:
PHP:
<?php
require_once("config.php");
$agent=$_SERVER["HTTP_USER_AGENT"];
if((ereg("Nav",$agent)
    || ereg("Gold",$agent)
    || ereg("X11",$agent)
    || ereg("Netscape",$agent))
    && !ereg("MSIE",$agent)
    && !ereg("Mozilla",$agent)
    && !ereg("Konqueror",$agent)) $browser = "Netscape";
elseif(ereg("Mozilla",$agent)
    || eregi("FireFox",$agent)
    || eregi("Bon.Echo",$agent)
    && !ereg("MSIE",$agent)) $browser = "FireFox";
elseif(ereg("MSIE",$agent)) $browser = "MSIE";
elseif(ereg("Lynx",$agent)) $browser = "Lynx";
elseif(ereg("Opera",$agent)) $browser = "Opera";
elseif(ereg("WebTV",$agent)) $browser = "WebTV";
elseif(ereg("Konqueror",$agent)) $browser = "Konqueror";
elseif(eregi("google",$agent)) $browser = "Chrome";
elseif(eregi("bot",$agent)
    || ereg("Slurp",$agent)
    || ereg("Scooter",$agent)
    || eregi("Spider",$agent)
    || eregi("Infoseek",$agent)) $browser = "Bot";
else $browser = "Other";
if(ereg("Win",$agent)) $os = "Windows";
elseif((ereg("Mac",$agent))
    || (ereg("PPC",$agent))) $os = "Mac";
elseif(ereg("Linux",$agent)) $os = "Linux";
elseif(ereg("FreeBSD",$agent)) $os = "FreeBSD";
elseif(ereg("SunOS",$agent)) $os = "SunOS";
elseif(ereg("IRIX",$agent)) $os = "IRIX";
elseif(ereg("BeOS",$agent)) $os = "BeOS";
elseif(ereg("OS/2",$agent)) $os = "OS/2";
elseif(ereg("AIX",$agent)) $os = "AIX";
else $os = "Other";
try
{
    mysql_connect($host,$user,$pass);
    mysql_select_db($db);
    $query="UPDATE `counter` SET `count`=`count`+1"
    $query.=" where (`type`='Total' AND `var`='Hits')"
    $query.=" OR (`type`='Browser' AND `var`='$browser')"
    $query.=" OR (`type`='OS' AND `var`='$os')";
    $result=mysql_query($query);
}
catch(Exception $error)
{
    die($error->getMessage()."\n");
}
توي كد بالا، همونطور كه ميبينيد، هم تعداد كلي بازديد و هم آمار تفكيكي برحسب نوع مرورگر و نوع سيستم عامل استخراج ميشه و به ركوردهاي مربوطه اضافه ميشه. تنها كار باقيمانده، كد MySQL مربوط به جداول هست:
کد:
CREATE TABLE `counter` (
  `ID` int(11) NOT NULL,
  `Type` longtext collate utf8_bin NOT NULL,
  `Var` longtext collate utf8_bin NOT NULL,
  `Count` int(11) NOT NULL,
  PRIMARY KEY  (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

INSERT INTO `counter` (`ID`, `Type`, `Var`, `Count`) VALUES
(1, 'Total', 'Hits', 0),
(2, 'Browser', 'Netscape', 0),
(3, 'Browser', 'FireFox', 0),
(4, 'Browser', 'MSIE', 0),
(5, 'Browser', 'Lynx', 0),
(6, 'Browser', 'Opera', 0),
(7, 'Browser', 'WebTV', 0),
(8, 'Browser', 'Konqueror', 0),
(9, 'Browser', 'Chrome', 0),
(10, 'Browser', 'Bot', 0),
(11, 'Browser', 'Other', 0),
(12, 'OS', 'Windows', 0),
(13, 'OS', 'Mac', 0),
(14, 'OS', 'Linux', 0),
(15, 'OS', 'FreeBSD', 0),
(16, 'OS', 'SunOS', 0),
(17, 'OS', 'IRIX', 0),
(18, 'OS', 'BeOS', 0),
(19, 'OS', 'OS/2', 0),
(20, 'OS', 'AIX', 0),
(21, 'OS', 'Other', 0);
اميدوارم كه خوشتون بياد. ضمناً خوشحال ميشم نظراتتون رو بدونم.
موفق و مؤيد باشيد.
 

Masoud1365

مدیر انجمن
این کد رو برای سایت ها پر بازدید استفاده کردید ؟ من فکر میکنم که فشار بیاره :-?
 

phpweb

Active Member
با این کد هربار که بازدیدکننده صفحه ای رو تقاضا کنه، مرورگر و سیستم عامل رو بدست می یارید و بعد توی پایگاه داده ذخیره می کنید، چرا بجای بدست آوردن نوع سیستم عامل و مرورگر و انجام این همه پردازش، رشته http_user_agent رو بطور کامل توی پایگاه داده ذخیره نمی کنید؟

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

نظرتون در این رابطه چیه؟
 

the_king

مدیرکل انجمن
با این کد هربار که بازدیدکننده صفحه ای رو تقاضا کنه، مرورگر و سیستم عامل رو بدست می یارید و بعد توی پایگاه داده ذخیره می کنید، چرا بجای بدست آوردن نوع سیستم عامل و مرورگر و انجام این همه پردازش، رشته http_user_agent رو بطور کامل توی پایگاه داده ذخیره نمی کنید؟

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

نظرتون در این رابطه چیه؟

تنوع رشته User Agent ها فوق العاده زیاده، در ضمن با این شیوه ای که پیاده سازی کرده اند صرفا تعداد کاربران
با فلان Browser شمارش میشه، که طبیعتا به فضای ذخیره سازی خیلی کمی نیاز داره. اگه 100 تا کاربر بشه 1000 تا
کاربر، تغییری در حجم بانک اطلاعاتی پیش نمیاد. نه اینکه یک لیست بلند بالا و طولانی از کاربران با Browser های مختلف
ذخیره بشه که اغلب شون هم تکراری و شبیه به هم اند و مدام بر حجم جدول افزوده بشه.
 

MMSHFE

Member
با سلام مجدد،
این کد رو برای سایت ها پر بازدید استفاده کردید ؟ من فکر میکنم که فشار بیاره :-?
با سلام، حقيقتش اين كد رو توي سايت خودم كه روزانه حدود 300-500 بازديد و همچنين سايت PHPClasses كه بطور متوسط روزانه 10 هزار بازديد داره بررسي كردم و تفاوتي ازنظر سرعت نديدم و طبق اعلام مدير خود سايت PHPClasses كه كد رو براي تست بهشون دادم، تفاوت زيادي ازنظر سرعت مشاهده نشد و همچنين بار زيادي هم به سرور وارد نكرد چون در نسخه 5.3 زبان PHP تغييرات خيلي زيادي براي بهينه سازي RegEx ايجاد شده. البته در نسخه بعدي اين كد، قصد دارم اين توابع رو با توابع متناظرشون در زبان Perl جايگزين كنم كه سرعت خيلي بيشتري دارن.
با این کد هربار که بازدیدکننده صفحه ای رو تقاضا کنه، مرورگر و سیستم عامل رو بدست می یارید و بعد توی پایگاه داده ذخیره می کنید، چرا بجای بدست آوردن نوع سیستم عامل و مرورگر و انجام این همه پردازش، رشته http_user_agent رو بطور کامل توی پایگاه داده ذخیره نمی کنید؟
در این صورت هروقت کاربرها یا مدیر سایت خواست آمار سایت رو ببینه، این پردازش ها انجام می شه.
نظرتون در این رابطه چیه؟
به دليل زيادشدن حجم اطلاعات كه در بيشتر مواقع تكراري هستن. ضمناً با يكسري تغييرات در كد، ميشه مقادير ديگري رو هم بدست آورد. مثلاً توي سايتم خودم با كمي تغييرات، به نحوي پياده سازي كردمش كه آمار تفكيكي برحسب ساعت مراجعه و حتي IP افراد بازديدكننده رو هم ذخيره ميكنه. انجام اين تغييرات هم صرفاً با افزودن كمي شرط و يك يا چند فيلد به بانك اطلاعاتي امكان پذيره.
تنوع رشته User Agent ها فوق العاده زیاده، در ضمن با این شیوه ای که پیاده سازی کرده اند صرفا تعداد کاربران با فلان Browser شمارش میشه، که طبیعتا به فضای ذخیره سازی خیلی کمی نیاز داره. اگه 100 تا کاربر بشه 1000 تا کاربر، تغییری در حجم بانک اطلاعاتی پیش نمیاد. نه اینکه یک لیست بلند بالا و طولانی از کاربران با Browser های مختلف ذخیره بشه که اغلب شون هم تکراری و شبیه به هم اند و مدام بر حجم جدول افزوده بشه.
دقيقاً با نظرتون موافقم. ممنون.
موفق و مؤيد باشيد.
 

phpweb

Active Member
با سلام مجدد،

با سلام، حقيقتش اين كد رو توي سايت خودم كه روزانه حدود 300-500 بازديد و همچنين سايت phpclasses كه بطور متوسط روزانه 10 هزار بازديد داره بررسي كردم و تفاوتي ازنظر سرعت نديدم و طبق اعلام مدير خود سايت phpclasses كه كد رو براي تست بهشون دادم، تفاوت زيادي ازنظر سرعت مشاهده نشد و همچنين بار زيادي هم به سرور وارد نكرد چون در نسخه 5.3 زبان php تغييرات خيلي زيادي براي بهينه سازي regex ايجاد شده. البته در نسخه بعدي اين كد، قصد دارم اين توابع رو با توابع متناظرشون در زبان perl جايگزين كنم كه سرعت خيلي بيشتري دارن.

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

دقيقاً با نظرتون موافقم. ممنون.
موفق و مؤيد باشيد.

می شه بگید که توی سایتتون از راه تبلیغات هم درآمد کسب می کنید یا نه؟
 

MMSHFE

Member
با سلام، حقيقتش قبلاً مدتي از اين راه كسب درآمد ميكردم ولي الآن ديگه نه. كلاً تبليغات رو حذف كردم. موفق و مؤيد باشيد.
 

جدیدترین ارسال ها

بالا