PDA

View Full Version : حرفه ای: شمارنده ی کامل با 24 نوع خروجی متفاوت



AliRezaPro
پنج شنبه 11 مهر 1392, 20:43 عصر
سلام خدمت دوستان در برنامه نویس
کلاسی نوشتم برای آمارگیری سایت که فکر میکنم کاملترین باشد. از این کلاس میتوانید 24 نوع خروجی دلخواه بر حسب نیازتون بگیرید . این کلاس دارای 10 تابع متفاوت فقط برای آمارگیری کلی سایت بدون هیچ محدودیتی است و 10 نوع تابع فقط بصورت آماراگیری یکتا است . 4 نوع بصورت کاملا کاستومایز شده است که هر نوع خروجی که بخواهید میتوانید بگیرید . در نوشتن این کلاس سعی شده تمامیه نیاز هایی که یک سایت میتواند داشته باشد رفع گردد. در این کلاس سعی شده موارد یهینگی رعایت گردد اما اینکه شاید هم هنور جای کار داشته باشد , لذا از دوستانی که استفاده میکنند خواهش میشود که مواردی که شاید بنده جا انداخته باشم , یا اینکه الگوریتمی بهتر برای یک مورد خواص به ذهنشون رسیده رو بیان کنند که این کلاس به شکلی بسیار کامل در بیاد.
البته رو این کلاس برای وردپرس هم کا کردم که حدودا 40 نوع خروجی متفاوت میتوانید بگیرید . اما قعلا امکان ریلریز اون کلاس نیست . فعلا سعی بنده اینه که استاندارد سازی کنم تا بتونم اونو در سایت wordpress به ثبت برسونم . پس از ثبت حتما در تاپیکی دیگر اطلاع داده خواهد شد.
نام تابع هایی که میتوانید از آنها بهره بگیرید :

get_todaye()
get_yest()
get_week()
get_twoWeek_ago()
get_month()
get_twoMonth_ago()
get_year()
get_twoYears_ago()
get_statistics()
get_all_visit()

get_unique_todaye()
get_unique_yest()
get_unique_week()
get_unique_twoWeek_ago()
get_unique_month()
get_unique_twoMonth_ago()
get_unique_year()
get_unique_twoYears_ago()
get_unique_statistics()
get_all_unique_visit()





get_specificDay_visits($date)
get_unique_specificDay_visits($date)
get_specificDay_visits_to_now($date)
get_unique_specificDay_visits_to_now($date)

در صفحه ایی که می خواهید از این کلاس استفاده کنید باید حتما نام این تابع را فراخوانی کنید :

increase_visited()
کدهای اصلی:

<?php

class pageStatistic {
public function __construct() {
require_once 'bn_parsidate.php';
require_once 'statCfg.php';
$this -> make_date_visit();
}

//this array for save statistic and unique
private $statistic = array("todaye" => 0, "yest" => 0, "week" => 0, "lweek" => 0, "month" => 0, "lmonth" => 0, "year" => 0, "lyear" => 0);
private $Ustatistic = array("todaye" => 0, "yest" => 0, "week" => 0, "lweek" => 0, "month" => 0, "lmonth" => 0, "year" => 0, "lyear" => 0);
//////////---****** This section for get a value !
/////////----****** this function have a public modify for easy to use

public function get_todaye() {// this function return todaye statistic and other function return yesterdaye and ...
return $this -> statistic['todaye'];
}

public function get_yest() {
return $this -> statistic['yest'];
}

public function get_week() {
return $this -> statistic['week'];
}

public function get_twoWeek_ago() {
return $this -> statistic['lweek'];
}

public function get_month() {
return $this -> statistic['month'];
}

public function get_twoMonth_ago() {
return $this -> statistic['lmonth'];
}

public function get_year() {
return $this -> statistic['year'];
}

public function get_twoYears_ago() {
return $this -> statistic['lyear'];
}

public function get_statistics() {
return $this -> statistic;
}

public function get_all_visit() {// this function gives you all statistic
$select = $this -> Get_statistic();
$counter = 0;
for ($i = 0; $num = $select -> fetch(PDO::FETCH_ASSOC); $i++) {
$counter += $num['count'];
}
return $counter;
}

public function get_unique_todaye() {//this function gives you todaye unque statistic
return $this -> Ustatistic['todaye'];
}

public function get_unique_yest() {
return $this -> Ustatistic['yest'];
}

public function get_unique_week() {
return $this -> Ustatistic['week'];
}

public function get_unique_twoWeek_ago() {
return $this -> Ustatistic['lweek'];
}

public function get_unique_month() {
return $this -> Ustatistic['month'];
}

public function get_unique_twoMonth_ago() {
return $this -> Ustatistic['lmonth'];
}

public function get_unique_year() {
return $this -> Ustatistic['year'];
}

public function get_unique_twoYears_ago() {
return $this -> Ustatistic['lyear'];
}

public function get_unique_statistics() {
return $this -> Ustatistic;
}

public function get_all_unique_visit() {//this function gives you all nnique visits
$flag = $this -> connection();
$select = $flag -> prepare("SELECT count(id) FROM ".DbName.".".UniqueTblName);
$select -> execute();
$count = $select -> fetch(PDO::FETCH_NUM);
return $count[0];
}

//this 4 function Additional function to customize your statistication
//in this function you can pass the date and get statistic of that day !
/*
*
*
*/
public function get_specificDay_visits($date) {// you can pass the date as argument for gets statistic for that date
try {
$d = str_replace('/', '', $date);
$flag = $this -> connection();
$select = $flag -> prepare("SELECT count FROM ".DbName.".".statisticTblName." where date='$d'");
$select -> execute();
$count = $select -> fetch(PDO::FETCH_NUM);
return $count[0];
} catch (exception $s) {
exit("you have error " . $s -> getMessage());
}

}

public function get_unique_specificDay_visits($date) {//you can pass the date as argument for gets all unique visits of that date
try {
$d = str_replace('/', '', $date);
$flag = $this -> connection();
$select = $flag -> prepare("SELECT sid FROM ".DbName.".".statisticTblName." where date='$d'");
$select -> execute();
$sid = $select -> fetch(PDO::FETCH_NUM);
$counter = $this -> Get_unique_statistic($sid[0]);
return $counter;
} catch (exception $e) {
exit("you have error " . $s -> getMessage());
}
}

public function get_specificDay_visits_to_now($date) {//you pass argument (date) and thsi function gives you all visites of that date to now
try {
$now = $this -> ChengeNumToEng(bndate('ymd'));
$d = str_replace('/', '', $date);
$getData = $this -> Get_statistic();
$count = 0;
for ($i = 0; $row = $getData -> fetch(PDO::FETCH_ASSOC); $i++) {
if (($d <= $row['date'])) {
$count += $row['count'];
}
}
return $count;
} catch (exception $e) {
exit("you have error " . $s -> getMessage());
}
}

public function get_unique_specificDay_visits_to_now($date) {
try {
$d = str_replace('/', '', $date);
$getData = $this -> Get_statistic();

$counter = 0;
for ($i = 0; $row = $getData -> fetch(PDO::FETCH_ASSOC); $i++) {

if (($d <= $row['date'])) {
// echo $sid[0]."/////".$this->Get_unique_statistic($sid[0])."//////".$d."/////".$row['date']."<br /.";

$counter += $this -> Get_unique_statistic($row['sid']);
}
}
return $counter;
} catch (exception $e) {
exit("you have error " . $s -> getMessage());
}
}

//////////////////////////////////////////------connection-----/////////////////////////////////////////
private function connection() {// this connection for connect to mysql databse
try {
$pdoCfg = array(PDO::ATTR_PERSISTENT => true, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'");
$pdo = new PDO("mysql:host=".host.";dbname=".DbName.";charset=UTF-8", DBUser, DBPass, $pdoCfg);
return $pdo;
} catch (PDOException $e) {
echo "Failed to get DB handle: " . $e -> getMessage() . "\n";
exit ;
}
}

/*
* this function increase the visitirs
*
*/
public function increase_visited() {
$ip = $this -> getIp();
$date = $this -> ChengeNumToEng(bndate('ymd'));
$flag = $this -> connection();
$query = $flag -> prepare("select sid,count,date from ".DbName.".".statisticTblName." where date='$date'");
$query -> execute(array($date));
if ($query -> fetch(PDO::FETCH_NUM) > 0) {//if exists date of todaye in db so do it
////get count of today and increase that
$query -> execute();
$row = $query -> fetch(PDO::FETCH_ASSOC);
$newcount = $row['count'] + 1;
$sid = $row['sid'];
///update count and increase visited field
$query = $flag -> prepare("UPDATE ".DbName.".".statisticTblName." SET `count`=? WHERE `date`='$date';");
$query -> bindParam(1, $newcount);
$query -> execute();
/////////------for check the exists ip in db write this code------//////////////////////////////////////////
$query = $flag -> prepare("select ip from ip_log where ip='$ip'");
$query -> execute(array($ip));
if (!$query -> fetch(PDO::FETCH_NUM) > 0) {
$query = $flag -> prepare("INSERT INTO ".DbName.".".UniqueTblName." (`sid`, `ip`) VALUES (?, ?);");
$query -> bindParam(1, $sid);
$query -> bindParam(2, $ip);
$query -> execute();
}
} else//if its not todaye so create the record and counter taht
{
$countNum = "1";
// if todaye date not exists on the db so we put in db
$query = $flag -> prepare("INSERT INTO ".DbName.".".statisticTblName." (`date`, `count`) VALUES (?, ?);");
$query -> bindParam(1, $date);
$query -> bindParam(2, $countNum);
$query -> execute();

$query = $flag -> prepare("select sid from ".DbName.".".statisticTblName." where date='$date'");
$query -> execute();
$sidRow = $query -> fetch(PDO::FETCH_BOTH);

$query = $flag -> prepare("INSERT INTO ".DbName.".".UniqueTblName."(`sid`, `ip`) VALUES (?, ?);");
$query -> bindParam(1, $sidRow[0]);
$query -> bindParam(2, $ip);
$query -> execute();
}

$flag = null;
}

/*
*
* this function makes the date and field the arraye as todaye and yest and ..
*/
private function make_date_visit() {
$pd = new bn_parsidate;
$now = $this -> ChengeNumToEng(bndate('ymd'));
$getStatistic = $this -> Get_statistic();
for ($i = 0; $row = $getStatistic -> fetch(PDO::FETCH_ASSOC); $i++) {
if ($now == $row['date']) {
$this -> statistic['todaye'] = $row['count'];
$this -> Ustatistic['todaye'] = $this -> Get_unique_statistic($row['sid']);
}
if (($pd -> persian_dateEN('ymd', strtotime('-1 day'))) == $row['date']) {
$this -> statistic['yest'] = $row['count'];
$this -> Ustatistic['yest'] = $this -> Get_unique_statistic($row['sid']);
}
if ($row['date'] >= $pd -> persian_dateEN('ymd', strtotime('-1 week')) && $row['date'] <= $pd -> persian_dateEN('ymd', strtotime('-1 day'))) {
$this -> statistic['week'] += $row['count'];
$this -> Ustatistic['week'] += $this -> Get_unique_statistic($row['sid']);
}
if ($row['date'] >= $pd -> persian_dateEN('ymd', strtotime('-2 week')) && $row['date'] <= ($pd -> persian_dateEN('ymd', strtotime('-1 week')))) {
$this -> statistic['lweek'] += $row['count'];
$this -> Ustatistic['lweek'] += $this -> Get_unique_statistic($row['sid']);
}
if ($row['date'] >= $pd -> persian_dateEN('ymd', strtotime('-1 month')) && $row['date'] <= $pd -> persian_dateEN('ymd', strtotime('-1 day'))) {
$this -> statistic['month'] += $row['count'];
$this -> Ustatistic['month'] += $this -> Get_unique_statistic($row['sid']);
}
if ($row['date'] >= $pd -> persian_dateEN('ymd', strtotime('-2 month')) && $row['date'] <= ($pd -> persian_dateEN('ymd', strtotime('-1 month')))) {
$this -> statistic['lmonth'] += $row['count'];
$this -> Ustatistic['lmonth'] += $this -> Get_unique_statistic($row['sid']);
}
if ($row['date'] >= $pd -> persian_dateEN('ymd', strtotime('-1 year')) && $row['date'] <= $pd -> persian_dateEN('ymd', strtotime('-1 day'))) {
$this -> statistic['year'] += $row['count'];
$this -> Ustatistic['year'] += $this -> Get_unique_statistic($row['sid']);
}
if ($row['date'] >= $pd -> persian_dateEN('ymd', strtotime('-2 year')) && $row['date'] <= $pd -> persian_dateEN('ymd', strtotime('-1 year'))) {
$this -> statistic['lyear'] += $row['count'];
$this -> Ustatistic['lyear'] += $this -> Get_unique_statistic($row['sid']);
}
}

}

//----------------------------------------------------------------------------------

private function Get_statistic() {
try {
$flag = $this -> connection();
$select = $flag -> prepare("SELECT sid,date,count FROM ".DbName.".".statisticTblName);
$select -> execute();
return $select;
} catch (PDOException $e) {
echo "Fail to catch visit from Dataase";
}

}

private function Get_unique_statistic($sid) {
$flag = $this -> connection();
$select = $flag -> prepare("SELECT sid FROM ".DbName.".".UniqueTblName." where sid='$sid'");
$select -> execute();
$count = 0;
for ($i = 0; $row = $select -> fetch(PDO::FETCH_NUM); $i++) {
$count++;
}
return $count;
}

private function getIp() {

$ip = $_SERVER['REMOTE_ADDR'];
if ($ip) {
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
return $ip;
}
// There might not be any data
return false;
}

private function ChengeNumToEng($num) {
$persian_digits = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹');
$english_digits = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
$myText = str_replace($persian_digits, $english_digits, $num);
return $myText;
}

}
?>

ساخت جداول :
CREATE TABLE `static` (
`sid` bigint(20) NOT NULL AUTO_INCREMENT,
`date` varchar(10) COLLATE utf8_persian_ci DEFAULT NULL,
`count` bigint(20) DEFAULT NULL,
PRIMARY KEY (`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=304 DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci;

CREATE TABLE `ip_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`sid` bigint(20) DEFAULT NULL,
`ip` varchar(15) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8;

فایل کانفیگ :

<?php
define('host', 'localhost');
define('statisticTblName', 'static');
define('UniqueTblName', 'ip_log');
define('DbName', 'weblog');
define('DBUser', 'root');
define('DBPass', '');
?>


نحوه ی استفاده :

<?php
require_once ('visit.php');
$visit = new pageStatistic();
$visit-> increase_visited();
echo "<b>Start Common Visits ///////</b>"."<br />";
echo "get_todaye() : " . $visit->get_todaye() . "<br />" . PHP_EOL;
echo "get_yest() : " . $visit->get_yest() . "<br />";
echo "get_week() : " . $visit->get_week() . "<br />";
echo "get_twoWeek_ago : " . $visit->get_twoWeek_ago() . "<br />";
echo "get_month() : " . $visit->get_month() . "<br />";
echo "get_twoMonth_ago(): " . $visit->get_twoMonth_ago() . "<br />";
echo "get_year() : " . $visit->get_year() . "<br />";
echo "get_twoYears_ago() : " . $visit->get_twoYears_ago() . "<br />";
echo "get_all_visit() : " .$visit->get_all_visit()."<br />";
echo "get_specificDay_visits() :".$visit->get_specificDay_visits('92/05/15')."<br />";
echo "<b>End Common Visits ///////</b> "."<br /><br />";
echo "------------------------------------------------------------------------<br /><br />";
echo "<b>All Unique Visits ... !</b>"."<br />";
echo "get_unique_todaye() : " . $visit->get_unique_todaye() . "<br />" . PHP_EOL;
echo "get_unique_yest() : " . $visit->get_unique_yest() . "<br />";
echo "get_unique_week() : " . $visit->get_unique_week() . "<br />";
echo "get_unique_twoWeek_ago() : " . $visit->get_unique_twoWeek_ago() . "<br />";
echo "get_unique_month() : " . $visit->get_unique_month() . "<br />";
echo "get_unique_twoMonth_ago(): " . $visit->get_unique_twoMonth_ago() . "<br />";
echo "get_unique_year() : " . $visit->get_unique_year() . "<br />";
echo "get_unique_twoYears_ago() : " . $visit->get_unique_twoYears_ago() . "<br />";
echo "get_all_unique_visit() : " .$visit->get_all_unique_visit(). "<br />";
echo "<b>End Unique Visits ///////</b>"."<br />";
echo"/------------------------<br><br>";
echo "<strong>Special Function</strong><br>";
echo "get_specificDay_visits() : " .$visit->get_specificDay_visits('92/05/12'). "<br />";
echo "get_unique_specificDay_visits() : " .$visit->get_unique_specificDay_visits('92/05/12'). "<br />";
echo "get_specificDay_visits_to_now() : " .$visit->get_specificDay_visits_to_now('92/05/12'). "<br />";
echo "get_unique_specificDay_visits_to_now() : " .$visit->get_unique_specificDay_visits_to_now('92/05/12'). "<br />";

?>
کل فایلها بدون دیتابیس(با کدهای بالا جداول را بسازید)

http://www.4shared.com/rar/SbNvsHKz/StatisticClass.html?
از ضمیمه
111469

redhat2
پنج شنبه 11 مهر 1392, 21:51 عصر
یه کلاس برای کار با دیتابیس نوشتم که pdo ، تویه همین انجمنه ، اگه میخواین می تونین گسترشش بدین و ازش استفاده کنین ، در ضمن خیلی ممنون بابت کلاس خیلی خوبی که نوشتین .

rezaonline.net
پنج شنبه 11 مهر 1392, 22:35 عصر
فایل رو یه جا دیگه آپلود میکنید ؟
ممنون

AliRezaPro
جمعه 12 مهر 1392, 01:57 صبح
فایل رو یه جا دیگه آپلود میکنید ؟
ممنون
فایل رو تو پست اول ضمیمه کردم