آگهی
article

نمایش آمار بازدیدها با PHP بدون استفاده از دیتابیس

php-online-stats

از جمله امکانات اولیه ای که ممکن است برای خیلی از سایت ها کاربردی باشد، نمایش آمار بازدیدها به مخاطبان است که وبمسترها برای رسیدن به این هدف از روش های مختلفی بهره می برند، به طور مثال برخی ترجیح می دهند از ابزارهای رایگان در سرویس های مختلف استفاده کنند، برخی از سایت های مرجع و عده ای نیز به دنبال راه اندازی سیستم شخصی خود هستند، به هر صورت در این مطلب برای کسانی که می خواهند سیستم نمایش آماری مستقل، بدون صرف منابع سرور، بدون استفاده از دیتابیس و بدون سر و کار داشتن با دانش برنامه نویسی سطح بالا داشته باشند و آمار بازدیدهای سایت خود را به صورت مختصر و مفید برای مخاطبان نمایش دهند، آموزش تقریبا کاملی در نظر گرفته ایم که امیدواریم مفید واقع شود، در این آموزش خواهیم دید که چگونه می توان با چند خط کدنویسی PHP یک سیستم ساده اما هوشمند و کاربردی محاسبه و نمایش آمار بازدیدها را ساخت.

چرا از آمارگیر بدون استفاده از دیتابیس استفاده کنیم؟


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

کد PHP برای محاسبه و نمایش آمار بازدیدها، نسخه ساده


برای محاسبه و نمایش آمار بازدیدها می توانیم از کد PHP زیر که در دو نسخه ساده و پیشرفته نوشته شده است استفاده کنیم، نسخه ساده این کد قادر به محاسبه و نمایش آمار بازدیدهای امروز، دیروز، بازدید کل و نمایش افراد آنلاین است، برای قسمت افراد آنلاین از IP کاربران جهت تفکیک آنها استفاده شده و به صورت پیش فرض بعد از هر بار بارگذاری صفحات سایت، آن کاربر تا 5 دقیقه آنلاین محسوب می شود و با رفرش یا بارگذاری صفحات دیگر، این زمان به صورت هوشمندانه به روز شده و از نو محاسبه می گردد، از جمله سایر امکانات این ابزار به ظاهر کوچک، قابلیت حذف خودکار IP کاربرانی است که دیگر آنلاین نیستند، این کار از اضافه شدن بی مورد حجم فایل برنامه جلوگیری می کند.
<?php
//آمار بازدیدهای امروز، دیروز، کل و نمایش افراد آنلاین
?>
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | نمایش آمار بازدیدها بدون دیتابیس</title>
<!-- Webgoo.ir -->
<style>
body {
    font-family: Tahoma, Geneva, sans-serif;
    font-size: 12px;
    direction: rtl;
}
.stats {
    display: block;
    margin-left: auto;
    margin-right: auto;
    width: 150px;
    height: auto;
    border: 1px solid #CCC;
    padding: 4px;
    line-height: 20px;
}
</style>
</head>
<body>
<?php
//اختلاف زمانی سرور
$time_zone = 12600;

//تاریخ امروز
$today = date("Y-m-d", time() + $time_zone);

//تاریخ دیروز
$yesterday = date("Y-m-d", time() - 86400 + $time_zone);

//آدرس فایل
$file_src = 'visit-stats.txt';
chmod($file_src, 0755);

//خواندن فایل
$read_file = file_get_contents($file_src);

//اگر فایل خالی نبود
if (filesize($file_src) > 0 || $read_file != ''){
    $split_file = explode('|', $read_file);
    
    //print_r($split_file);
    $modify = $split_file[3];
    
    //اگر تاریخ آخرین ویرایش برابر تاریخ امروز نبود
    if($modify != $today){
        $today_visit = 1;
        
        if($modify == $yesterday){
            $yesterday_visit = $split_file[0];
        } else{
            $yesterday_visit = 0;
        }
        
        $total_visit = $split_file[2] + 1;
        $last_modify = $today;
    } //اگر تاریخ آخرین ویرایش برابر امروز بود
    else{
        $today_visit = $split_file[0] + 1;
        $yesterday_visit = $split_file[1];
        $total_visit = $split_file[2] + 1;
        $last_modify = $today;
    }
} //اگر فایل خالی بود
else{
    $today_visit = 1;
    $yesterday_visit = 0;
    $total_visit = 1;
    $last_modify = $today;
}

//نوشتن آمار جدید در فایل
$file_src_handle = fopen($file_src, 'w+');
$visit_data = $today_visit . '|' . $yesterday_visit . '|' . $total_visit . '|' . $last_modify;
fwrite($file_src_handle, $visit_data);
fclose($file_src_handle);

//محاسبه تعداد کاربران آنلاین
$config_array = array(
'user_time' => date("YmdHis", time() + $time_zone),
'user_ip' => $_SERVER['REMOTE_ADDR'],
'file_name' => 'visit-online.txt'
);
chmod($config_array['file_name'], 0755);

//خواندن اطلاعات فایل
$online_file = file_get_contents($config_array['file_name']);

//تجزیه به آرایه
$online_file = explode("\r\n", $online_file);

//حذف مقادیر خالی
foreach($online_file as $key=> $value){
    if(is_null($value) || $value == ''){
        unset($online_file[$key]);
    }
}

//حذف آی پی های قدیمی و آی پی فعلی
foreach($online_file as $key=> $value){
    $user_ip_time = explode("|", $value);
    if($user_ip_time[1] <= date("YmdHis", time() + $time_zone - 300)){
        unset($online_file[$key]);
    }
    
    if($user_ip_time[0] == $config_array['user_ip']){
        unset($online_file[$key]);
    }
}

//محاسبه تعداد افراد آنلاین
$online = 1;
foreach($online_file as $online_users){
    $user_ip_time = explode("|", $online_users);
    if($user_ip_time[1] >= date("YmdHis", time() + $time_zone - 300)){
        $online++;
    }
}

//آمار کاربرانی که آنلاین هستند به اضافه کاربر فعلی
$new_online = $config_array['user_ip'] . "|" . $config_array['user_time'] . "\r\n";;
foreach($online_file as $key=> $value){
    $new_online .= $value . "\r\n";
}

//نوشتن آمار جدید در فایل
$file_src_handle = fopen($config_array['file_name'], 'w+');
fwrite($file_src_handle, $new_online);
fclose($file_src_handle);

//////////////// Webgoo.ir ///////////////

//گرفتن خروجی
echo '<div class="stats">
&raquo; بازدید امروز: '
. $today_visit . '<br>
&raquo; بازدید دیروز: '
. $yesterday_visit . '<br>
&raquo; بازدید کل: '
. $total_visit . '<br>
&raquo; افراد آنلاین: '
. $online . '
</div>'
;
?>
</body>
</html>
برای استفاده از این برنامه قبل از هر چیز کدها را در یک فایل PHP با نام دلخواه (به طور مثال stats.php) ذخیره کرده و دو فایل با فرمت txt با نام های visit-stats.txt و visit-online.txt در کنار فایل اصلی برنامه ایجاد می کنیم، از این دو فایل برای ذخیره و نمایش اطلاعات مربوط به بازدیدها و افراد آنلاین استفاده خواهیم کرد، سپس در ابتدای کد، اختلاف زمان محلی و زمان سرور خود را مشخص می کنیم، به طور مثال اگر زمان سرور بر روی GMT تنظیم شده باشد، اختلاف محلی برای ایران در حالت معمول معادل 3:30 ساعت و به عبارتی 12600 ثانیه است (60*60 برابر 3600 ثانیه برای یک ساعت).
توضیح:
- با تابع date و time تاریخ امروز را به صورت میلادی به دست می آوریم، سپس از همین روش استفاده کرده و زمان فعلی را از 86400 ثانیه که معادل 24 ساعت است (3600 * 24) کم می کنیم تا تاریخ دیروز نیز مشخص شود.
- در گام بعدی فایل مورد نظر جهت ذخیره و بازیابی آمار بازدیدها را تعیین کرده و با تابع file_get_contents اطلاعات آن را می خوانیم، همچنین برای اطمینان از قابل ویرایش بودن فایل، با تابع chmod مجوزهای ویرایش (Permission) را بر روی عدد 0755 تنظیم می کنیم.
- اگر حجم فایل بیشتر از 0 بایت بود یا اینکه فایل خالی نبود یعنی قبلا آماری در آن ثبت شده است، در این صورت آمار باید به صورت نمونه زیر ثبت شده باشد:
24|92|124|2012-10-26
در اینجا عدد اول تعداد بازدیدهای امروز، عدد دوم بازدیدهای دیروز، عدد سوم بازدید کل و عبارت آخر تاریخ آخرین ویرایش فایل مزبور است، همان طور که ملاحظه می کنید از یک جدا کننده با علامت (|) استفاده کرده ایم، این جداکننده زمانی که با تابع explode کار می کنیم لازم است و می توان با آن بخش های مختلف را از هم تفکیک و تجزیه کرد و نتیجه را به صورت یک آرایه تبدیل نمود.
- زمانی که اطلاعات به آرایه تبدیل می شوند می توان به مقادیر کلیدهای آن دسترسی داشت، به طور مثال در کد بالا اگر با print_r از متغیر split_file خروجی بگیریم، نتیجه به شکل نمونه زیر خواهد بود.
Array
(
[0] => 345
[1] => 431
[2] => 17345
[3] => 2012-10-26
)
ملاحظه می کنید که شمارش کلیدها از صفر شروع شده و تا 3 ادامه پیدا می کند، به طور مثال کلید 3 تاریخ آخرین ویرایش فایل را در خود دارد (برای کسب اطلاعات بیشتر در این خصوص لطفا به بخش آرایه ها در آموزش های مقدماتی PHP مراجعه کنید).
- در گام بعدی بررسی می کنیم تا ببینیم آیا تاریخ آخرین ویرایش فایل برابر تاریخ امروز است یا خیر، اگر این طور باشد بازدید امروز و بازدید کل باید افزایش یابند، اما اگر تاریخ امروز با تاریخ آخرین ویرایش تفاوت کند محاسبه بازدیدها وارد یک روز جدید شده و آمار فعلی باید به عنوان آمار دیروز در نظر گرفته شود و بازدید امروز نیز از نو شروع شده و نهایتا بازدید کل نیز افزایش یابد (درک صحیح عملکرد اسکریپت با کمی تامل و آشنایی با مبحث آرایه ها آسان می گردد).
- اما اگر حجم فایل بیش از 0 بایت نبود یا اینکه فایل خالی باشد اولین باری است که اطلاعات در آن ذخیره می شود، لذا آمار امروز برابر 1، آمار دیروز برابر 0 و آمار کل برابر با 1 خواهد بود.
- در نهایت نیز با توابع fopen و متد +w و همچنین تابع fwrite و fclose فایل را بازکرده و اطلاعات جدید را در آن می نویسیم، در اینجا اگر در برخی سرورها با وجود استفاده از تابع chmod با خطای سطح دسترسی پائین برای ویرایش فایل مواجه شدیم، باید به کنترل پنل هاست خود رفته و به صورت دستی مجوزهای ویرایش (Permission) را بر روی عدد 755 تنظیم کنیم.
- در قسمت دوم اسکریپت تعداد افراد آنلاین را محاسبه می کنیم، برای این کار ابتدا در آرایه config_array زمان فعلی، IP کاربر و آدرس فایل را مشخص می کنیم (مقادیر آرایه به صورت کلیدهای 0 تا 2 در دسترس هستند).
- در اینجا از دو علامت جدا کننده استفاده می کنیم، علامت (\r\n) که برای ایجاد یک خط جدید و آرایش ردیفی اطلاعات هر کاربر کاربرد دارد و علامت (|) که بین IP و زمان آن تفکیک ایجاد می کند، به فرض:
127.0.0.1|20121026134434
127.0.0.2|20121026134324
127.0.0.3|20121026134233
نکته: علامت (\r\n) قابل روئیت نیست اما باعث ایجاد خط جدید می شود و در فایل وجود دارد.
- ابتدا در یک حلقه foreach کلیدهایی که مقادیر خالی دارند را از آرایه حذف می کنیم (با استفاده از unset)، در واقع این کار برای جلوگیری از محاسبه آخرین خط در تعداد افراد آنلاین است (آخرین خط صرفا علامت (\r\n) را در خود دارد و لذا مقادیر آن خالی است، برای دیدن جزئیات فایل visit-online.txt را با یک ویرایشگر (مانند ++Notepad) که شماره خطوط را نشان دهد باز کنید، خواهید دید که خط آخر مقادیری ندارد).
- در حلقه foreach بعدی IP و زمان کاربرانی که از حالت آنلاین خارج شده اند (یعنی بیش از حداکثر زمان تعیین شده غیرفعال بوده اند) را حذف می کنیم، علاوه بر این اطلاعات قبلی کاربر فعلی را نیز از لیست آرایه حذف می کنیم.
- اکنون تعداد IP های باقی مانده را محاسبه کرده و به همراه کاربر فعلی در متغیر online مقداردهی می کنیم.
- سپس آمار کاربرانی که آنلاین هستند و کاربر فعلی را به طور مجدد در فایل visit-online.txt ذخیره می کنیم، این کار برای جلوگیری از افزایش بیش از حد حجم فایل مفید است (اگر این کار را نکنیم اطلاعات قدیمی بی جهت در فایل ما ذخیره شده و حجم فایل به مرور و به طور مداوم افزایش می یابد).
- در نهایت نیز متغیرهای اصلی برنامه را به خروجی می دهیم، برای این کار از دستور echo استفاده کرده ایم.

کد PHP برای نمایش آمار بازدیدهای هفته و ماه، نسخه پیشرفته


برای کاربرانی که تمایل دارند علاوه بر آمار بازدید امروز، دیروز و کل، بازدیدهای هفته (7 روز گذشته) و ماه (30 روز گذشته) را نیز به مخاطبان خود نمایش دهند، کد بالا را به نحوی توسعه داده ایم که به جای 2 روز، اطلاعات بازدیدهای 30 روز گذشته را در خود نگهداری کند، یادآور می شویم که این کد لزوما مطابق با روزهای هفته یا ماه در تقویم شمسی یا میلادی نیست و صرفا قادر به نگهداری و تجزیه تحلیل بازدیدهای 7 و 30 روز گذشته صرف نظر از تطابق با روزهای هفته و ماه در تقویم است، نوشتن آمارگیر مطابق با روزهای تقویم نیازمند وجود دیتابیس و ثبت دقیق جزئیات بازدیدها است که این برنامه برای این کار ساخته نشده است.
<?php
//آمار بازدیدهای امروز، دیروز، 7 روز گذشته، 30 روز گذشته، کل و نمایش افراد آنلاین
?>
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | نمایش آمار بازدیدها بدون دیتابیس</title>
<!-- Webgoo.ir -->
<style>
body {
    font-family: Tahoma, Geneva, sans-serif;
    font-size: 12px;
    direction: rtl;
}
.stats {
    display: block;
    margin-left: auto;
    margin-right: auto;
    width: 150px;
    height: auto;
    border: 1px solid #CCC;
    padding: 4px;
    line-height: 20px;
}
</style>
</head>
<body>
<?php
//اختلاف زمانی سرور
$time_zone = 12600;

//تاریخ امروز
$today = date("Y-m-d", time() + $time_zone);

//تاریخ دیروز
$yesterday = date("Y-m-d", time() - 86400 + $time_zone);

//متغیرهای پیش فرض
$week_visit = 0;
$month_visit = 0;
$month_str = null;

//آدرس فایل
$file_src = 'visit-stats.txt';
chmod($file_src, 0755);

//خواندن فایل
$read_file = file_get_contents($file_src);

//اگر فایل خالی نبود
if (filesize($file_src) > 0 || $read_file != ''){
    $split_file = explode('|', $read_file);
    
    //print_r($split_file);
    $modify = $split_file[31];
    
    //اگر تاریخ آخرین ویرایش برابر تاریخ امروز نبود
    if($modify != $today){
        $today_visit = 1;
        
        if($modify == $yesterday){
            $yesterday_visit = $split_file[0];
        } else{
            $yesterday_visit = 0;
        }
        
        $week_visit += $today_visit + $yesterday_visit;
        $month_visit += $today_visit + $yesterday_visit;
        
        for($i = 2; $i < 30; $i++) {
            $month_str .= $split_file[$i - 1];
            
            if($i < 29) {
                $month_str .= '|';
            }
            
            if($i < 8) {
                $week_visit += $split_file[$i - 1];
            }
            
            $month_visit += $split_file[$i - 1];
        }
        
        $total_visit = $split_file[30] + 1;
        $last_modify = $today;
    } //اگر تاریخ آخرین ویرایش برابر امروز بود
    else{
        $today_visit = $split_file[0] + 1;
        $yesterday_visit = $split_file[1];
        $week_visit += $today_visit + $yesterday_visit;
        $month_visit += $today_visit + $yesterday_visit;
        
        for($i = 2; $i < 30; $i++) {
            $month_str .= $split_file[$i];
            
            if($i < 29) {
                $month_str .= '|';
            }
            
            if($i < 8) {
                $week_visit += $split_file[$i];
            }
            
            $month_visit += $split_file[$i];
        }
                            
        $total_visit = $split_file[30] + 1;
        $last_modify = $today;
    }
} //اگر فایل خالی بود
else{
    $today_visit = 1;
    $yesterday_visit = 0;
    $week_visit = 1;
    $month_visit = 1;
    
    for($i = 2; $i < 30; $i++) {
        $month_str .= '0';
        
        if($i < 29) {
            $month_str .= '|';
        }
    }
    
    $total_visit = 1;
    $last_modify = $today;
}

//نوشتن آمار جدید در فایل
$file_src_handle = fopen($file_src, 'w+');
$visit_data = $today_visit . '|' . $yesterday_visit . '|' . $month_str . '|' . $total_visit . '|' . $last_modify;
fwrite($file_src_handle, $visit_data);
fclose($file_src_handle);

//محاسبه تعداد کاربران آنلاین
$config_array = array(
'user_time' => date("YmdHis", time() + $time_zone),
'user_ip' => $_SERVER['REMOTE_ADDR'],
'file_name' => 'visit-online.txt'
);
chmod($config_array['file_name'], 0755);

//خواندن اطلاعات فایل
$online_file = file_get_contents($config_array['file_name']);

//تجزیه به آرایه
$online_file = explode("\r\n", $online_file);

//حذف مقادیر خالی
foreach($online_file as $key=> $value){
    if(is_null($value) || $value == ''){
        unset($online_file[$key]);
    }
}

//حذف آی پی های قدیمی و آی پی فعلی
foreach($online_file as $key=> $value){
    $user_ip_time = explode("|", $value);
    if($user_ip_time[1] <= date("YmdHis", time() + $time_zone - 300)){
        unset($online_file[$key]);
    }
    
    if($user_ip_time[0] == $config_array['user_ip']){
        unset($online_file[$key]);
    }
}

//محاسبه تعداد افراد آنلاین
$online = 1;
foreach($online_file as $online_users){
    $user_ip_time = explode("|", $online_users);
    if($user_ip_time[1] >= date("YmdHis", time() + $time_zone - 300)){
        $online++;
    }
}

//آمار کاربرانی که آنلاین هستند به اضافه کاربر فعلی
$new_online = $config_array['user_ip'] . "|" . $config_array['user_time'] . "\r\n";;
foreach($online_file as $key=> $value){
    $new_online .= $value . "\r\n";
}

//نوشتن آمار جدید در فایل
$file_src_handle = fopen($config_array['file_name'], 'w+');
fwrite($file_src_handle, $new_online);
fclose($file_src_handle);

//////////////// Webgoo.ir ///////////////

//گرفتن خروجی
echo '<div class="stats">
&raquo; بازدید امروز: '
. $today_visit . '<br>
&raquo; بازدید دیروز: '
. $yesterday_visit . '<br>
&raquo; بازدید هفته: '
. $week_visit . '<br>
&raquo; بازدید ماه: '
. $month_visit . '<br>
&raquo; بازدید کل: '
. $total_visit . '<br>
&raquo; افراد آنلاین: '
. $online . '
</div>'
;
?>
</body>
</html>
دستور العمل نحوه استفاده از این کد نیز مشابه با حالت ساده آن است که در ابتدای مطلب آموزش داده شد، کافی است کدها را در یک فایل PHP با نام دلخواه (به طور مثال stats.php) ذخیره کرده و در کنار فایل PHP دو فایل با فرمت txt با نام های visit-stats.txt و visit-online.txt ایجاد کنیم.
نکته 1: در صورتی که فایل visit-stats.txt از قبل و برای نسخه ساده برنامه وجود دارد، برای نصب، راه اندازی مجدد و استفاده از نسخه پیشرفته برنامه، محتوای این فایل باید خالی باشد!
نکته 2: یادآور می شویم این برنامه لزوما مطابق با روزهای هفته و ماه در تقویم هجری شمسی یا میلادی نیست و صرفا آمار بازدیدهای 7 و 30 روز گذشته را نگهداری می کند، نوشتن سیستم آمارگیر مطابق با تقویم نیازمند وجود دیتابیس اطلاعاتی و در اختیار داشتن جزئیات دقیق بازدیدها است.
sectionدسته بندی: آموزش کاربردی » PHP
related مطالب بیشتر:
» ساخت فید خوان آر اس اس (RSS Feed Reader) با PHP
» تبدیل تاریخ میلادی، شمسی با مبدل JDF در PHP
» ساخت منوی هوشمند با PHP و CSS
» محدود کردن لینک دانلود مستقیم فایل ها با PHP و htaccess
» نحوه نمایش متن و تصاویر اتفاقی در PHP و MySQL
commentنظرات (۶۴ یادداشت برای این مطلب ارسال شده است)
more یادداشت های جدید بر اساس تاریخ ارسال در انتهای یادداشت های موجود نمایش داده می شوند.
نویسنده: reza
زمان: ۲۳:۰۵:۱۲ - تاریخ: ۱۳۹۴/۰۶/۱۰
سلام ممنون از کدی که در اختیارمون گذاشتید
یه مشکل دارم اونم اینه که بازدید ها رو 2 تا 2 تا اضافه می کنه راهنمایی کنید لطفا
پاسخ: 
سلام
این مشکل از کد نیست، احتمالا از تنظیمات یونیکد سرور یا سایت شما است که باعث می شود مرورگر برای تشخیص یونیکد مناسب برای پردازش صفحه، دو بار فایل را فراخوانی کند، متاسفانه توضیح نحوه رفع این مورد ساده نیست، باید سرور و فایل هایتان را طوری تنظیم کنید که به صورت پیش فرض از UTF-8 استفاده کند.
http://allseeing-i.com/How-to-setup-your-PHP-site-to-use-UTF8
نکته: برخی پلاگین های نصب شده در مرورگر نیز می توانند باعث بروز اینگونه مشکلات شوند.
نویسنده: reza
زمان: ۱۷:۲۷:۳۱ - تاریخ: ۱۳۹۴/۰۶/۱۱
من دارم تو لوکال تست می کنم هم تو فایرفاکس تست کردم هم کروم ولی نشد
پاسخ: 
در این مبحث فرقی بین سرور و لوکال هاست وجود ندارد، دقت کنید که فایل های شما به صورت UTF-8 بدون BOM باشند (در لینک آموزش پاسخ قبل توضیح داده شده)!
همچنین دقت کنید که تابع را دو بار فراخوانی نکرده باشید، به فرض فایل دو بار در صفحه include نشده باشد!
نویسنده: حمیدرضا
زمان: ۰۳:۰۰:۳۴ - تاریخ: ۱۳۹۴/۰۶/۱۶
سلام. ایا این امار بازدید با هر بار رفرش افزایش پیدا میکنه؟ اگر اینجوره و بشه با رفرش امار بازدید ساخت ایا گوگل سایت رو اسپم نمیکنه؟
پاسخ: 
سلام
این آمارگیر به صورت داخلی است و کاربرد دیگری جزء نمایش تعداد بازدیدها (قاعدتا شامل رفرش هم خواهد شد) به کاربران ندارد، لذا از دید گوگل تنها چند خط متن ساده است و هیچ تاثیر دیگری ندارد!
نویسنده: hossein
زمان: ۱۴:۵۴:۲۵ - تاریخ: ۱۳۹۴/۰۶/۲۰
خیلی عالی بود مرسی
اصلا حوصله نوشتن این کد ها رو نداشتم یه سرچ کردم از اینجا سر در اوردم
خیلی کد باحالی بود
ممنون
نویسنده: مسیحا
زمان: ۱۲:۴۶:۳۳ - تاریخ: ۱۳۹۴/۰۷/۲۹
ببخشید از روی کدی که تو نظرات گذاشته بودید کد خودم رو به این شکل در اوردم ولی نمیدونم چرا به روز نمیشه تعداد بازدید گوگلم
if($firstshow==1)
//بدست آوردن آدرس ارجاع
@$referer_http = $_SERVER['HTTP_REFERER'];
//بررسی ارجاع از سایتی خاص
$referer_google = preg_match('/google\.com|^$/i', $referer_http);
if($referer_google > 0){
//ارجاع از گوگل
}
{
$sql="update karbaran set googlecounter=$referer_google+1 where username='$username'";
}
کجای کارم اشتباهه؟
پاسخ: 
با این تکه کدی که درج کرده اید برداشت خاصی نمی توان داشت!، صرفا دستور SQL را خارج از شرط if درج کرده اید، ضمن اینکه مشخص نیست قبل و بعد این دستور از چه روشی برای اتصال به پایگاه داده استفاده شده، در کل می توانید داخل شرط یک دستور فرضی به صورت زیر درج کنید:
echo 1;
اگر این دستور اجرا و 1 در خروجی چاپ شد، یعنی ارجاع از گوگل در کد محاسبه شده (و لذا باید بر روی نحوه صحیح به روز رسانی ستون جدول دیتابیس تمرکز کنید).
نویسنده: مسیحا
زمان: ۰۹:۱۴:۵۶ - تاریخ: ۱۳۹۴/۰۷/۳۰
تست کردم بازم نشد مشکل حتما از یه جا دیگست ببخشید دستورات دیگه ای داریم که ارجاع رو به دست اورد؟ ساده تر یا یه یه جور دیگه شاید کار کرد! در مورد این مثال بالای شما هم که گفتی اگر برابر با 1 بود ... من تو عمل نتونستم پیادش کنم
پاسخ: 
ساده تر از این کد برای این کار وجود ندارد! دقت کنید در تست باید بدانید که دقیقا دنبال چه چیزی هستید، در اینجا تست به این صورت است که باید روی یک لینک از نتایج جستجوی گوگل که به سایت شما ارجاع دهد کلیک کنید، در این صورت مرورگر در اطلاعات
HTTP_REFERER
آدرس گوگل را به سرور می دهد و می توان با کدهای PHP بررسی کرد که آیا عبارت google.com در آدرس ارجاع داده شده وجود دارد یا خیر، ساختار خیلی ساده است، کافی است با PHP آشنایی داشته باشید!
نکته: کد تست شده و مشکلی ندارد!
نویسنده: رستاک
زمان: ۱۳:۵۲:۱۰ - تاریخ: ۱۳۹۴/۱۱/۱۰
با سلام
دوست عزیزمون اقا حسین سوالی مطرح کردن که چگونه میشه برای هر وبلاگ یا سایت آمار جداگونه نمایش داد . توضیحاتتونو خوندم اما کامل متوجه نشدم . اگه امکانش هست یه توضیح کاملی بیان کنید . مرسی
پاسخ: 
سلام
به دلیل جزئیات زیاد متاسفانه نمی توان این مورد را کامل در این قسمت توضیح داد! ابتدا باید بدانید که چطور مانند سایت های ارائه کننده ابزار وبلاگی، پارامترها را در URL دستور iframe یا JavaScript به سرور ارسال کنید، اگر در کد ایجاد شده در اینگونه سایت ها دقت کنید، معمولا در انتهای آدرس URL، پارامترهایی وجود دارد که به صورت داینامیک (بسته با آنچه کاربر در هنگام ایجاد کد وارد می کند) ساخته می شوند، بر اساس همین پارامترها می توانیم در کدهای خود برای هر آدرس، یک فولدر مجزا داشته باشیم (یا البته با دیتابیس هم می شود کار کرد)، به فرض:
<script type="text/javascript" src="http://yoursite.ir/tools/stats/get.php?url=user_blog_name"></script>
به این ترتیب و با کمی کدنویسی می توان فایل ها را از هر فولدر بر اساس آنچه کاربر درخواست می کند فراخوانی و نمایش یا ویرایش کرد، همچنین باید نحوه استفاده ترکیبی JavaScript و PHP را بلد باشید، چون کدی که کاربر در وبلاگ درج می کند معمولا به صورت JavaScript است، اما در قسمت آدرس src به یک فایل PHP آدرس داده می شود و پارامترها به این فایل ارسال و در نهایت خروجی در وبلاگ کاربر چاپ می شود.
نویسنده: گلناز
زمان: ۲۱:۴۹:۴۳ - تاریخ: ۱۳۹۴/۱۲/۰۳
سلام خسته نباشید.
سوالی داشتم
در یک دیتابیس 3 تا جدول وجود داره که همیشه ثابت هست .
مثلا جدول 1 . جدول 2 . جدول 3
میخواستم بقیه جدول های این دیتابیس انتخاب کنم و به فیلد هاش دسترسی داشته باشم بقیه جدول های دیتابیس نام و تعداد مشخصی نداره اگر ممکنه راهنماییم کنید.
پاسخ: 
می توانید لیست جداول موجود را به کمک دستور زیر مانند یک پرس و جوی معمولی در کدهای PHP اجرا کنید و نتیجه را به صورت آرایه (در حلقه) دریافت و مطابق نیازتان استفاده نمائید:
SHOW TABLES FROM database_name
به جای پارامتر database_name، نام دیتابیس خود را جایگزین کنید.
نویسنده: محمدحسین
زمان: ۱۴:۴۲:۵۶ - تاریخ: ۱۳۹۵/۰۲/۲۱
متشکرم بابت مطلب خوبی که گذاشتید ... موفق باشید ان شاء الله...
نویسنده: morteza
زمان: ۲۱:۵۲:۰۵ - تاریخ: ۱۳۹۵/۰۳/۲۶
با سلام میخواستم بدونم اگر فقط بخوام یه کانتر ساده بصورتی که با هر بار لود شدن عدد یکبار افزایش پیدا کنه... یعنی اولین نفر بشه 1 و الی آخر و echo بشه تو همون صفحه باید چه از چه کدی استفاده کنم؟ نمیخوام ثبت بشه یا آنلاینی ها و ... مشخص بشه چون نمیخوام حجم فایلم زیاد بشه!
پاسخ: 
این کد و روش، فوق العاده سبک است و با افزایش بازدیدکننده هیچ افزایش خاصی در حجم فایل ایجاد نمی شود، صرفا عدد موجود افزایش پیدا می کند نه اینکه به تعداد هر کاربر یک فایل ایجاد شود، ضمن اینکه وجود سیستم ثبت آمار بدون ثبت واقعی آمار در یک فایل یا دیتابیس عملا امکانپذیر نیست!
نویسنده: حسین
زمان: ۱۹:۲۵:۱۱ - تاریخ: ۱۳۹۵/۰۵/۱۶
با سلام
ممنون به خاطر این مطلب مفید
فقط یه سوال ؟
فرض کنید شما لینک سایت بنده را در سایت خودتون قرار دادین.
حالا یه کاربر تو سایت شما بر روی لینک سایت بنده کلیک میکنه و میاد به سایت من.
سوال اینجاست : چطور میتونم بفهمم که کاربر از سایت شما به سایت من اومده
یا مثلا از یک سایت دیگه نیومده.
اگه میشه یه نمونه کدی بهم بدین.
با تشکر .. .. .. .. ..
پاسخ: 
در PHP دستور زیر آدرس صفحه ارجاعی را نمایش می دهد:
echo $_SERVER['HTTP_REFERER'];
نکته: از آنجایی که این اطلاعات از سمت کاربر دریافت می شود، این احتمال وجود دارد که غیرواقعی و دستکاری شده نیز باشند!
نویسنده: محمد امین
زمان: ۰۹:۵۴:۵۹ - تاریخ: ۱۳۹۵/۰۷/۲۳
ممنون خیلی عالی بود
نویسنده: مهدی
زمان: ۲۳:۱۵:۴۲ - تاریخ: ۱۳۹۵/۰۷/۳۰
سلام
اگه یخواهیم همین رو با استفاده از دیتابیس بنویسیم باید په کار کنیم؟
پاسخ: 
پاسخ کوتاهی برای سوالتان قابل ارائه نیست! باید هر قسمت که اطلاعات در فایل ذخیره می شود را با کدنویسی در دیتابیس ذخیره کنید و هر قسمت که اطلاعات از فایل خوانده می شود را با پرس و جوی MySQL و کدنویسی PHP دریافت کنید، در صورت آشنایی قبلی با برنامه نویسی PHP و MySQL تبدیل این کد خیلی سخت نخواهد بود!
نویسنده: محمد
زمان: ۱۸:۰۳:۴۱ - تاریخ: ۱۳۹۵/۰۹/۰۷
سلام ممنون از سایت خوبتون
ببخشید من یک مشکلی داشتم و اون این هست که هر باری که صفحه رو رفرش میکنم به تعداد بازدید ها یکی اضافه میشود و یا این که به هر صفحه ای که در داخل سایت میرم باز یک واحد به امار بازدید اضافه میشود اگر امکانش هست راهنمایی کنید
پاسخ: 
این کد برای محاسبه تعداد بازدید است نه بازدیدکننده، لذا عملکرد مورد اشاره صحیح است! برای داشتن سیستم محاسبه بازدیدکننده باید کدی جداگانه نوشته شود.
نویسنده: tmmovie
زمان: ۰۰:۳۴:۲۲ - تاریخ: ۱۳۹۶/۰۵/۲۵
چگونه میتونم به سایت شما برای توسعه آموزش کمک کنم؟
با استفاده از مرجع پرسش پاسخ
stack overflow‬
یا ساختار پروژه
github
سایت شما همچنین نیاز به ارتقاء ساختار برای درک بهتر کاربران از دانش قرار گرفته شده دارد
پاسخ: 
در نسخه فعلی سایت متاسفانه امکانی برای همکاری در نظر گرفته نشده اما ساختار جدید در حال برنامه نویسی و طراحی است که روند پروژه در بالا سمت چپ مشخص است، در این نسخه ساز و کاری برای همکاری حرفه ای علاقمندان در نظر گرفته خواهد شد.
more لطفا پیش از ارسال یادداشت نکات زیر را مد نظر داشته باشید:
- مواردی که به کلی خارج از موضوع این مطلب هستند را در فرم منوی "تماس با ما" مطرح و پاسخ را از طریق ایمیل دریافت کنید.
- به سوالات کلی، مبهم، غیرضروری و مشکلاتی که تلاشی برای رفع آن نکرده باشید پاسخ خاصی داده نخواهد شد.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین قرار دهید تا امکان تست و بررسی وجود داشته باشد.
- تمام یادداشت ها بررسی و برای هر کاربر زمان مشخصی جهت پاسخگویی در نظر گرفته می شود، لذا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.




7 × 4
 refresh
نکته:
با توجه به تاریخ نگارش آموزش های سایت و پیشرفت تکنولوژی های مرتبط با وب در سالیان اخیر، محتوای برخی از مطالب قدیمی ممکن است نیاز به ویرایش و به روزرسانی داشته باشد که این کار هم زمان با تهیه نسخه جدید «وبگو» به مرور در حال انجام است، لطفا در استفاده از مطالب سایت به این نکته دقت داشته و حتی المقدور از چند منبع مختلف استفاده نمائید.
آخرین دیدگاه ها
form حامد
در:
عالی بود
۲۱:۳۸:۳۱ ۱۳۹۸/۱۱/۰۷

form ناشناس
در:
سلام خیلی ممنون بابت پاسخ سریعتون خیلی دنبال همین دو خط کد بودم برای یادگیری سریع ریجکس ولی با سرچ پیدا نکردم و...
۱۸:۰۳:۴۳ ۱۳۹۸/۱۱/۰۷

form فرید
در:
درود بشما، میخواستم بدونم مثل کلمه @، کلمه ایی ساین هم داریم؟ با تشکر
۱۲:۱۹:۰۷ ۱۳۹۸/۱۱/۰۷

form ناشناس
در:
سلام میشه لطفا به سوالم جواب بدید من می خوام با استفاده از عبارات با قاعده تمام تگ های html رو تشخیص بدم...
۱۰:۱۳:۰۵ ۱۳۹۸/۱۱/۰۷

form PewDiePie
در:
سلام چطور می تونم این کد رو یه لینک هم بهش اضافه کنم یعنی این که وقتی عکس رو می بینی طرف بتونه...
۲۳:۳۶:۲۶ ۱۳۹۸/۱۱/۰۶

form رسول
در:
سلام میخوام بجای نمایش متن، متن موجود در یه لینکو بهم نشون بده ممنون میشم کمکم کنید
۱۳:۳۸:۱۸ ۱۳۹۸/۱۱/۰۶

form حسن
در:
من مطابق کد نوشته شده شما میخواستم آدرس
۱۴:۱۰:۱۳ ۱۳۹۸/۱۱/۰۵

form saemrezaei
در:
سلام واقعا عالییه خیلی استفاده کردم به وبلاگم سر بزن لطفا.
۱۳:۳۷:۳۴ ۱۳۹۸/۱۱/۰۵

form نصراله رضایی
در:
سلام در ادمین های گذشته که باز می کنم تصاویر مشاهده نمی شود و من را به آدرس Huge domains.com ارجاع می...
۲۲:۳۹:۵۳ ۱۳۹۸/۱۱/۰۴

form نقدی زاده
در:
واقعا مرسی یه overflow-y:hidden به body دادم اسکرل افقی برای صفحه نمایش تبلت از بین رفت
۱۴:۴۴:۱۳ ۱۳۹۸/۱۱/۰۴

form وحید پوربشیری
در:
سلام لطفا یکی که خوب جاوا اسکریپت بلده بیاد به این آیدی ت.ل.گ.ر.ا.م Alpha2020@ یه کد برام بنویسه پول هم میدم
۱۱:۱۲:۳۲ ۱۳۹۸/۱۱/۰۲

form امین
در:
سلام تشکر بابت راهنماییتون. منظور من این بود که: الان با ثبت نام کاربر a در سایت اطلاعاتش در دیتابیس ثبت میشه و یک پوشه...
۰۳:۱۲:۴۰ ۱۳۹۸/۱۱/۰۲

form شریفی
در:
سلام معنی متن زیر چیست؟
۱۸:۲۸:۰۹ ۱۳۹۸/۱۱/۰۱

form امین
در:
سلام خسته نباشید یه اسکریپت دارم که وقتی کاربر ثبت نام میکنه یه پوشه و محتواش ایجاد میشه. میخوام یه صفحه با هر ثبت نام...
۱۴:۱۸:۵۱ ۱۳۹۸/۱۰/۳۰

form Admin
در:
سلام دوست عزیز. میشه بگویید چگونه میتوان در وبلاگ کادری را باز کرد که بازدید کنندگان بتوانند در آن چیزی بنویسند. ممنون میشم...
۱۱:۲۸:۵۰ ۱۳۹۸/۱۰/۳۰
آگهی