شنبه ۲۲ شهریور ۱۴۰۴

Saturday, September 13, 2025 GMT +3:30

نمایش آمار بازدیدها با 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 روز گذشته را نگهداری می کند، نوشتن سیستم آمارگیر مطابق با تقویم نیازمند وجود دیتابیس اطلاعاتی و در اختیار داشتن جزئیات دقیق بازدیدها است.
دسته بندی: آموزش کاربردی » PHP
related مطالب بیشتر:
محدود کردن لینک دانلود مستقیم فایل ها با PHP و htaccess
نحوه نمایش متن و تصاویر اتفاقی در PHP و MySQL
تبدیل تاریخ میلادی، شمسی با مبدل JDF در PHP
دریافت و نمایش پیج رنک گوگل با PHP
آموزش ساخت نقشه XML سایت (Sitemap) با PHP و MySQL
دیدگاه
more ۷۹ دیدگاه برای این مطلب ارسال شده است.
more چینش دیدگاه ها به ترتیب از جدیدترین به قدیمی ترین است.
پـــرتو
۲۲:۰۲ ۱۴۰۲/۰۴/۱۶
سلام خسته نباشید شما فتوشاپ بلدین؟ شرمنده بخدا هعی سوال برام پیش میاد ببخشید می خواستم یه عکس توی فتوشاپ درست کنم که می خواستم اگه بشه یه قسمت از پس زمینه از عکس و حذف کنم و رنگش کنم مثل پس زمینه اش و بعد افکت شیشه ای روش بزارم یعنی روی یه قسمت از عکس (فقط و فقط روی یه قسمت از عکس) بعد من بلدم چطور میشه کل عکس رو شیشه ای کرد ولی بلد نیستم چطور میشه یه قسمت از عکس رو شیشه ای کرد؟ ممنون میشم کمی برام توضیح بدین ممنونم متوجه منظورم میشین؟
توضیح تکنیک های فتوشاپ ساده نیست و بعضا مراحل و جزئیات زیادی دارد، در هر صورت برای هدف مد نظرتان می توانید از تصویر فعلی یک کپی در لایه جدید ایجاد کنید، سپس با ابزارهای قسمت Marquee (مستطیل و دایره نقطه چین) بخش مد نظر از تصویر را انتخاب و با استفاده از قسمت Image و Corp برش بزنید، افکت شیشه ای را بر روی قسمت برش زده ایجاد کنید، سپس با کپی و یا Drag کردن لایه برش زده را بر روی تصویر اولیه منتقل و قسمت مد نظر را جایگزین کنید.
۱۵:۲۴ ۱۴۰۲/۰۳/۱۹
با سلام ببخشید این کدها تو وردپرس هم میشه استفاده کرد؟
بله، منتها باید با نحوه ویرایش قالب های وردپرس و کمی برنامه نویسی PHP آشنا باشید.
پـــرتو
۱۱:۵۰ ۱۴۰۲/۰۳/۱۹
سلام خسته نباشید ببخشید این کد رو میشه برای وبلاگ بلاگفا استفاده کرد یا نه؟ اگر نمیشه میشه یه کد مثل این برای بلاگفا بدین؟ و این کد رو دقیقا باید کجا گذاشت؟ داخل قالب یا تنظیمات وبلاگ؟ اصن میشه داخل وبلاگ گذاشت؟ ممنون میشم بگین لطفا من یه کدی مثل این برای بلاگفا احتیاج داشتم ممنون میشم برای بلاگفا هم مثل این آموزش دهید لطفا ممنونم
خیر متاسفانه این سیستم آمارگیر صرفا مناسب سایت ها است و به صورت مستقیم برای بلاگفا قابل اجرا و استفاده نیست، لطفا از سرویس هایی مانند
1abzar.com
استفاده کنید.
۱۱:۴۴ ۱۴۰۱/۰۸/۰۱
سلام خوبید جدید یک هفته ای هست تعداد آنلاین ها را فقط عدد یک نشون میده بی زحمت یه بررسی کنید البته سی‌دی‌ان سایت تغییر کرد
در صورت تداوم مشکل می توانید فایل های ایجاد شده در قسمت آمارگیر را به صورت فشرده شده (فرمت zip) به آدرس ایمیل ما (موجود در بخش تماس) ارسال کنید تا بررسی کنیم.
۱۵:۱۰ ۱۴۰۰/۰۷/۲۹
سلام روی سایت شما این کد به درستی عمل می کنه رو سایت بنده یک روز در میان ریست میشه! دیگه نمیدونم چکار کنم !
به هر حال هیچ مشکلی بی دلیل نیست، در صورت تمایل و امکان می توانید یک حساب موقت ایجاد کنید تا کد در سرورتان بررسی شود یا اینکه برای بررسی با برنامه Teamviewer از فرم تماس هماهنگی کنید.
۱۶:۴۱ ۱۴۰۰/۰۷/۲۲
سلام
بنده طبق فرمایشات شما پیش رفتم هر روز ریست میکنه
تصاویر حذف شد
کد حرفه ای 2 را با کمی ویرایش نمایش فقط آنلاین درج کردم
کد حذف شد
یه بررسی کلی کنید سر در نیاوردم بیشتر از این ممنون از شما
مجدد کد به صورت دستی تست شد، برای حالت واقعی در آدرس زیر برای چند روز آینده بررسی خواهیم داشت:
https://webgoo.ir/example/test/stat.php
حداقل به صورت دستی که تاریخ موجود در فایل visit-stats.txt را یک روز به عقب می بریم در سرور ما مشکلی دیده نمی شود، به نظر رفتار برنامه باید در سرورتان بررسی شود، برای مثال تاریخ موجود در فایل visit-stats.txt را از 2021-10-14 به 2021-10-13 بازنویسی، فایل را ذخیره و صفحه آمارگیر را رفرش کنید، این درست شبیه همان اتفاقی است که لحظه ورود به روز جدید رخ می دهد، اختلاف زمانی (متغیر time_zone) را مطابق سرورتان تنظیم کنید، در سرور ما تاریخ برای ایران تنظیم شده و عدد 12600 (معادل اختلاف 3:30 ساعت از GMT) درست نیست و باید 0 درج شود.
اگر با همه این موارد مشکل پیدا نشود تنها راه حل بررسی و تست آنلاین فایل ها در سرورتان است.
عباس
۰۳:۱۰ ۱۴۰۰/۰۷/۱۸
سلام دوباره فکر کنم من یه اشتباهی انجام دادم بنده یه فایل به اسم state.php ساختم و آپلود کردم با notepad++ هم تست کردم مشکلی نداشت من واسه فراخوانی آمار هم کل کد را در بخش مورد نظر نوشتم یعنی محتویات داخل فایل state.php اگه این مشکل داره من چجوری تعداد آنلاین ها را فراخوانی کنم در هر جای سایت که خواستم؟
این کد در دو نوع ساده و پیشرفته ارائه شده که برای استفاده از هر کدام از آنها کافی است مراحل زیر را انجام دهید:
- دو فایل متنی کاملا خالی (با ++Notepad چک کنید که به صورت BOM نباشد) با نام های visit-online.txt و visit-stats.txt در ریشه سایت (یا هر دایرکتوری دلخواه دیگری) ایجاد کنید.
- یک فایل PHP با نام دلخواه (همان stats.php) در ریشه سایت یا هر دایرکتوری دلخواه دیگری ایجاد و یکی از نمونه کدهای ساده یا پیشرفته را کپی کرده و در این فایل درج کنید.
- برای محاسبه یا نمایش آمار کافی است فایل stats.php را در قالب اصلی سایت به صورت include وارد کنید، دقت کنید که آدرس دهی به فایل stats.php باید صحیح باشد.
در صورتی که خطایی دریافت کردید یا مشکل دیگری بود لطفا با اسکرین شات از خطا و محتوای فایل ها توضیحات و تصاویر را به آدرس ایمیل ما (موجود در بخش تماس) ارسال یا جهت بررسی با برنامه TeamViewer هماهنگی کنید.
۰۴:۵۴ ۱۴۰۰/۰۷/۱۷
سلام خسته نباشید بنده طبق آموزش کد را با همان نام های پیش فرض در مسیر
public_html ساختم و ... الان آمار به درستی کار می کنه مشکلی که پیش اومده هر دو روز یکبار این آمار صفر میشه
<html>
//حذف آی پی های قدیمی و آی پی فعلی
//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]);
// }
//}
</html>
این بخش هم غیرفعال کردم قبل غیرفعال کردن این بخش همین مشکل بود یک روز در میان آمار روز گذشته صفر میشد
قسمتی که حذف کردید برای محاسبه افراد آنلاین است و به بخش محاسبه آمار بازدیدها ارتباطی ندارد، ما کدها را مجددا تست و بررسی کردیم و مشکل حذف اطلاعات بعد از چند روز مشاهده نشد، لطفا مطمئن شوید که در فایل های txt عبارت نامرئی BOM وجود نداشته باشد، برای این کار فایل ها را با برنامه ++Notepad اجرا کرده و از منوی Encoding گزینه Encode in UTF-8 را انتخاب و فایل را ذخیره کنید.
برای تست آفلاین می توانید با برنامه WampServer فایل ها را به صورت لوکال در مرورگر فراخوانی و تاریخ سیستم را چند روز به عقب برگردانید.
۱۹:۲۳ ۱۴۰۰/۰۷/۰۳
سلام و عرض ادب
یه سوال داشتم اگه بخوام مقدار کاربران آنلاین هر 1 ثانیه یکبار رفرش بشه داخل یک button چه دستوری باید بزنم ؟
<code>
<button>
کاربران آنلاین » 1' . $online . '
</button>
</code>
انجام این کار ساده نیست و نیاز به کدنویسی دارد، باید با جاوا اسکریپت به یک فایل PHP که خروجی آن تعداد کاربران آنلاین باشد درخواست Ajax بفرستید و پاسخ را در دکمه مربوطه نمایش دهید، اگر الزاما 1 ثانیه مد نظر باشد بهتر است به جای Ajax از WebSocket استفاده کنید.
۰۴:۲۰ ۱۴۰۰/۰۷/۰۳
سلام خیلی عالی بود ممنون از شما
mahdi
۱۴:۳۳ ۱۴۰۰/۰۶/۲۵
سلام استاد عزیز،
استاد اگر من بخوام برای پنل ادمین همچین سیستمی بنویسم که فقط یه آمار ساده نمایش بدم این روش خوبه یا با دیتابیس انجامش بدم ؟
و استاد کلا اگر با جاوا اسکریپت انجامش بدم و داده ها رو لوکال استروریج ذخیره کنم ایرادی داره؟
خیلی ممنون استاد عزیز
این سیستم به اصطلاح دم دستی، سریع و جنبه نمایش بازدید به مخاطبان دارد، به فرض برای سرویس هایی مثل وبلاگ ها می تواند مناسب باشد، اما اگر هدف داشتن اطلاعات کاملتر شامل IP، User-Agent و تعداد بازدیدکننده (نه صرفا بازدید) است ناچاریم از دیتابیس استفاده کنیم، با جاوا اسکریپت اطلاعات در سیستم همان شخص نگهداری می شوند اما برای آمارگیر باید اطلاعات یکجا در سرور متمرکز باشند!؟
پیام
۲۲:۵۵ ۱۴۰۰/۰۶/۰۸
سلام، واقعا کارآمد و خوب. با استفاده از کد شما و تغییراتی که دادم تونستم اطلاعات رو توی دیتابیس ذخیره کنم. فقط اگه جسارت نباشه یه ایراد کوچولویی می‌تونم بگیرم و اونم این هستش که قسمت دوم کد یعنی ثبت کاربران آنلاین رو منوط به گذر زمان کردید که تا 5 دقیقه ذخیره می‌شه. ولی تو قسمت اول کد این لحاظ کردن زمان رو نداریم و باعث می‌شه که کاربر حتی اگه صفحه رو رفرش هم بکنه، یکی به بازدید سایت اضافه بشه که خوب منطق این رو میگه که آمار فیک می‌ده. میشه قسمت اول رو هم مثل قسمت دوم براش بازه زمانی 5 دقیقه در نظر بگیریم که اگه آی‌پی مربوطه توی 5 دقیقه حتی صفحه رو رفرش هم بکنه بازدید جدید به حساب نیاد. هر چند سلیقه‌ای هست. ممنون.
ممنون از نکته سنجی و پیشنهاد سازنده، کد مبتنی بر تعداد بازدیدها است (نه بازدیدکننده) و در حالت پایه و حداقلی نوشته شده که می توانید مطابق نیازتان توسعه دهید، برای محاسبه دقیق تعداد بازدیدکننده معمولا باید اطلاعات IP ها حداقل برای 24 ساعت نگهداری و تطابق داده شوند که به دلیل محدودیت های کار با فایل نیاز به ذخیره در دیتابیس است.
علی
۱۰:۵۹ ۱۴۰۰/۰۲/۱۲
سلام وقت بخیر
میشه هفته و ماه رو هم اضافه کنید
کد در دو نسخه ساده و پیشرفته نوشته شده است، در حالت پیشرفته بازدیدهای هفته و ماه هم شمارش می شود، لطفا بخش دوم مطلب را مطالعه کنید.
مهدی
۱۲:۱۹ ۱۳۹۹/۱۱/۰۷
خیلی ممنون آموزش خیلی خوبی بود
۱۲:۲۵ ۱۳۹۹/۰۲/۰۱
درود بر شما، کدها پیاده سازی شدند و کاملا درست کار را انجام و ذخیره می کنند اما گاهی به ناگهان آمار صفر می شود به نظر شما مشکل از کجاست جناب مهندس؟
باسپاس از شما بابت سایت و توضیحات عالی.
مشکل نیاز به بررسی بیشتر دارد، باید ببینیم در چه بازه زمانی و به چه نحوی این اتفاق می افتد؟ آیا فایل کاملا خالی می شود؟ تاریخ ها در سرور مشکلی ندارد؟ مجوز نوشتن فایل ها توسط کدهای دیگری تغییر نمی کند؟ در مجموع ظاهرا مشکل می تواند مربوط به مرحله نوشتن اطلاعات باشد که فایل به درستی با اطلاعات جدید بازنویسی نمی شود، اگر تمایل داشتید کدها را در یک آدرس مجزا قرار دهید تا امکان تست و بررسی بیشتر فراهم باشد.
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
1 × 5
20 × 20
=