PDA

View Full Version : آموزش: شمارنده آمار بازديد



MMSHFE
سه شنبه 28 دی 1389, 12:59 عصر
با سلام، دوستان گرامي خواستم بعد از اينهمه آموزش ساخت كد شمارنده سايت كه هر كدوم يك روش رو پيشنهاد ميكنن، من هم روش خودم رو بگم كه چند ساله دارم استفاده ميكنم و علاوه به انعطاف پذيري بالايي كه داره، حجم ديتابيس رو هم بالا نميبره. خوب مستقيم ميريم سراغ كد:


<?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);
اميدوارم كه خوشتون بياد. ضمناً خوشحال ميشم نظراتتون رو بدونم.
موفق و مؤيد باشيد.

maysam.m
شنبه 02 بهمن 1389, 11:40 صبح
سلام

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

MMSHFE
شنبه 02 بهمن 1389, 12:18 عصر
با سلام، اين كد صرفاً براي ذخيره سازي آمار كلي و تفكيكي برحسب نوع مرورگر كاربرد داره. براي موارد ديگه، دارم يك كد كاملتر آماده ميكنم كه در عين حال كه آمار بازديد سالانه، ماهانه، روزانه، برحسب ساعت، دقيقه و ثانيه بازديد رو اعلام ميكنه، بانك اطلاعاتي اون هم به همين شكل بهينه است يعني ركوردهاي زيادي لازم نداره كه همه اين اطلاعات رو ثبت كنه (فقط مجموع در بانك ثبت ميشه). موفق و مؤيد باشيد.

Dead Space
شنبه 02 بهمن 1389, 13:10 عصر
ببخشید ولی PHP توصیه کرده دیگه از تابع ereg استفاده نکنیم دلیلش چیه؟
WarningThis function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.

MMSHFE
یک شنبه 03 بهمن 1389, 07:17 صبح
با سلام، دليلش اينه كه اين دستور منسوخ شده (Deprecated) و در نسخه 6 زبان PHP وجود نخواهد داشت. در نسخه بعدي اين كد، اين مورد هم درنظر گرفته شده و با دستورات RegEx زبان Perl جايگزين خواهد شد. موفق و مؤيد باشيد.

alonemm
یک شنبه 03 بهمن 1389, 12:13 عصر
سلام دوست من:
با تشکر از شما که آموزش به روش خودتونو گزاشتید و این خیلی خوبه که کاربران روش های کدنویسی خودشونو مطرح کنند تا یک روش بهینه تر مشخص بشه.
اما در مورد اون قسمت که گفتید بیشتر کدها که این عملیات رو انجام میدن دیتابیس رو شلوغ میکنند من خودم یک روش ساده و کارآمد برای این کار گزاشتم که فقط یک ردیف جدول مربوطه داره و سرعت لودش هم بالاست.

http://barnamenevis.org/showthread.php?269921-ساخت-باکس-تعداد-بازدید-کنندگان-سایت&highlight=

رضا قربانی
دوشنبه 04 بهمن 1389, 09:50 صبح
چرا همتون زدید به آموزش آمار بازدید

اگه مسابقه هست بگین ما هم شرکت کنیم:متفکر:

ولی بدون شوخی خوبه همین طوری پیش برین :قلب:

MMSHFE
دوشنبه 04 بهمن 1389, 12:55 عصر
سلام دوست من:
با تشکر از شما که آموزش به روش خودتونو گزاشتید و این خیلی خوبه که کاربران روش های کدنویسی خودشونو مطرح کنند تا یک روش بهینه تر مشخص بشه.
اما در مورد اون قسمت که گفتید بیشتر کدها که این عملیات رو انجام میدن دیتابیس رو شلوغ میکنند من خودم یک روش ساده و کارآمد برای این کار گزاشتم که فقط یک ردیف جدول مربوطه داره و سرعت لودش هم بالاست.

http://barnamenevis.org/showthread.php?269921-ساخت-باکس-تعداد-بازدید-کنندگان-سایت&highlight=
با سلام، كدتون رو ديدم و بايد بگم كه روش مناسبي رو انتخاب كرديد. در حال حاضر دارم روي روشي كار ميكنم (در مرحله تجزيه و تحليل) كه بشه به كمك اون، بدون بار اضافه برروي DB، آمار روزانه، هفتگي، ماهانه و سالانه رو استخراج كرد. به محض تكميل شدن، براتون ميگذارم تا نظرتون رو بگين. موفق و مؤيد باشيد.

alonemm
دوشنبه 04 بهمن 1389, 19:40 عصر
با سلام، كدتون رو ديدم و بايد بگم كه روش مناسبي رو انتخاب كرديد. در حال حاضر دارم روي روشي كار ميكنم (در مرحله تجزيه و تحليل) كه بشه به كمك اون، بدون بار اضافه برروي DB، آمار روزانه، هفتگي، ماهانه و سالانه رو استخراج كرد. به محض تكميل شدن، براتون ميگذارم تا نظرتون رو بگين. موفق و مؤيد باشيد.

سلام دوست من :
اگه دقت كرده باشيد كدي كه من گزاشتم فقط 1 رديف داده در جدول شما داره و همونو ويرايش ميكنه.
من نميفهم اين جمله كه ميگيد:


بدون بار اضافه برروي DB،

كجاش هست؟


موفق باشيد.

MMSHFE
سه شنبه 05 بهمن 1389, 09:49 صبح
با سلام، منظورم اين نبود كه كد شما بار اضافه روي DB داره. منظورم از گفتن بدون بار اضافه برروي DB اين بود كه كد جديدي كه دارم آماده ميكنم هم به همين شكل عمل ميكنه و نياز به ذخيره سازي ركوردهاي متعدد براي توليد آماد موردنظر نداره.
موفق و مؤيد باشيد.

MMSHFE
پنج شنبه 13 بهمن 1390, 08:11 صبح
اینجا انجمن PHP هست. لطفاً سؤالتون رو توی بخش مناسب مطرح کنید.

mbf5923
پنج شنبه 13 بهمن 1390, 10:48 صبح
سلام
اولا ممنون از کدتون
در ثانی یه خواهشی از تمام دوستان و اساتید دارم:
خواهشا کدهاتون رو توی تگ PHP ننویسید و از تگ HTML استفاده کنید.تگ PHP مشکل داره تازه باید نشست فاصله حذف کرد
من نمیدونم کی قراره این مشکل رفع بشه