PDA

View Full Version : سوال: شمارش تعداد پينگ به سايت



ravand
سه شنبه 11 بهمن 1390, 11:19 صبح
سلام
سوالي كه ذهن منو مشغول كرده اينه كه آيا ميشه تعداد ping كه به آدرس سايت ميشه رو شمرد؟
متشكرم.

tux-world
سه شنبه 11 بهمن 1390, 12:01 عصر
تو گزارشات cpanel ميشه ولي تو برنامه نويسي بخواييد الان چيزي به ذهنم نمياد. تو سي پانل يه آناليزور هستش كه اطلاعات دقيق ميده و چون پينگ ها مستقيم با سرور در ارتباط هستند بهتر و راحت تر ميشه جواب گرفت در كل سوال خوبي هستش و براي امينت هم همچنين

mbf5923
سه شنبه 11 بهمن 1390, 14:05 عصر
خوب اگه با CPANEL بشه با برنامه نویسی هم میشه
Cpanel متشکل از جاوا و PHP هستش

ravand
سه شنبه 11 بهمن 1390, 20:40 عصر
اينكه اين سوال رو پرسيدم دليل خاصي داشت. دليلشم يكي اين بود كه فردي كه با سيستم rss feeds مباحث سايت رو دنبال ميكنه بالاخره به سايت وصل ميشه . حالا درست وارد صفحه اي شايد نشه. دليل ديگه اش هم اين بود كه اگه يه روزي يه نرم افزاري نوشتم كه با سايت كنترل ميشه بدونم در روز چقدر نفر از اين نرم افزار استفاده ميكنند اونم وقتي كه به اينترنت وصل ميشن.
اين بحث خيلي بحث جالبي هست اگه بتونيم براش جواب پيدا كنيم اونم با برنامه نويسي عالي ميشه. :لبخند:
متشكرم.

Bahram0110
پنج شنبه 13 بهمن 1390, 17:09 عصر
سلام
با کد نویسی نمی شه چون پینگ باعث اجرای صفحه نمی شه و فقط یک هدر بازگشت داده می شه.

ravand
پنج شنبه 13 بهمن 1390, 18:13 عصر
منظورتون از هدر چيه؟

eshpilen
پنج شنبه 13 بهمن 1390, 21:05 عصر
Ping با پروتکل ICMP کار میکنه.
این پروتکل در سطح پروتکل IP هست.
آپاچی در سطح پروتکل TCP کار میکنه که یک لایه بالاتره.
بنابراین Packet های Ping هیچوقت به آپاچی نمیرسن که بخواد جواب بده یا Log بکنه.
گرفتن و پاسخ به Ping مربوط به خود سرور میشه. حالا اینکه Log میشه یا نه و کجا، خبر ندارم.
Ping در اصل به وبسایت خاصی مثل سایت شما ارسال نمیشه. بلکه به IP سرور ارسال میشه.
اینکه آدرس سایتتون رو Ping میکنید، این آدرس به IP سرور تبدیل و استفاده میشه که یحتمل صدها سایت دیگه هم روی هاست شما هستن که آدرس وب همه به همین IP تبدیل میشه. یعنی IP مشترک هست.
Ping فقط نشون میده که سرور روشن و قابل دسترسی هست. هیچ اطلاعاتی راجع به وبسایت شخصی شما نمیده.

سرور هم اگر Ping رو Log بکنه، بنظرم هیچ اطلاعاتی توش پیدا نمیشه که مشخص بکنه اون Ping بر اساس چه دامینی ارسال شده بوده، چون فکر میکنم اون آدرس در کلاینت به IP تبدیل شده و چیزی ازش به سرور ارسال نشده.

ضمنا اگر Ping یک سرور جواب بده لزوما نمیشه مطمئن بود که وبسایت ما در دسترس هست. ممکنه به هر علتی منجمله مشکل در نرم افزار سرویس دهندهء وب، سایت ما آنلاین نباشه (ولی خب طبیعتا این حالت در عمل باید خیلی کم پیش بیاد). یعنی Ping روشن و در دسترس بودن سرور از طریق شبکه/اینترنت رو نشون میده و نه چیز دیگه.

eshpilen
جمعه 14 بهمن 1390, 00:16 صبح
ضمنا درخواستهای HTTP HEAD رو با Ping اشتباه نگیرید.
اینا دوتا چیز جداگانه هستن در دو پروتکل و سطح متفاوت.

MMSHFE
جمعه 14 بهمن 1390, 09:56 صبح
اينكه اين سوال رو پرسيدم دليل خاصي داشت. دليلشم يكي اين بود كه فردي كه با سيستم rss feeds مباحث سايت رو دنبال ميكنه بالاخره به سايت وصل ميشه . حالا درست وارد صفحه اي شايد نشه. دليل ديگه اش هم اين بود كه اگه يه روزي يه نرم افزاري نوشتم كه با سايت كنترل ميشه بدونم در روز چقدر نفر از اين نرم افزار استفاده ميكنند اونم وقتي كه به اينترنت وصل ميشن.
اين بحث خيلي بحث جالبي هست اگه بتونيم براش جواب پيدا كنيم اونم با برنامه نويسي عالي ميشه. :لبخند:
متشكرم.
با سلام، دوست عزیز شما اگه RSS Feed رو با کد PHP تولید کنید، میتونید Refererها رو ذخیره کنید یا بشمارید و... و نیازی به استفاده از Ping نیست. بعلاوه، همونطور که جناب Eshpilen گفتن، دستور Ping به سرور ارسال میشه نه به سایت شما. بنابراین، حتی اگه Log هم بشه، باز هم به درد شما نمیخوره چون نه تنها در اکثر مواقع اجازه دسترسی به این Logها رو ندارید، بلکه اگه سرور هم به شما اجازه بده، نمیدونید از اینهمه Ping کدومش مال سایت شماست. درمورد نرم افزار هم فرق زیادی نداره و کافیه Referer رو بدست بیارین. درسته که خیلی قابل اعتماد نیست اما تنها راه منطقی و در دسترس هست. البته اگه سرور اختصاصی بخرید، اونوقت اوضاع فرق میکنه چون فقط سایت شما روی اون هاست هست و ضمناً دسترسی کامل به همه چیز خواهد داشت. موفق باشید.

ravand
جمعه 14 بهمن 1390, 13:28 عصر
من به كمك يكي از بچه ها يه rss feeds ساختم كه افرادي كه از اين سرويس استفاده ميكنند رو بشماره. اونم وقتي كه اين آدرس فيدز رو به مرورگرشون اضافه كردن فقط تعدادشون شمارش ميشه . ولي در آمارشون در روز معلوم نيست چند نفر بازديد كردن. اين اصطلاح Referer كه گفتيد چي هست؟

MMSHFE
جمعه 14 بهمن 1390, 16:10 عصر
ببینید دوست عزیز، Referer یعنی مراجعه کننده. توی وب به معنای صفحه ای هست که اسکریپت شما رو درخواست کرده و ازطریق ['SERVER['HTTP_REFERER_$ میتونید بهش دسترسی پیدا کنید. حالا با استفاده از این، میتونید خیلی کارها بکنید. برای مثال، تعداد Refererها رو در روز بشمارید، ببینید هر Referer چندبار درخواست داده و... که دیگه بستگی به نوع طراحی شما داره و الگوریتمش رو به شکلهای مختلفی میشه تولید کرد. خودتون یکم روش فکر کنید، اگه به نتیجه نرسیدین بگین تا یک مثال مطرح کنم. موفق باشید.

ravand
جمعه 14 بهمن 1390, 18:09 عصر
قبل از هر چيز بايد مدير شدنتون رو بهتون تبريك بگم.
انشاالله در تمام مراحل زندگيتون موفق باشيد.

ببخشيد آيا اين تابع زير مي تونه اون افرادي رو كه در روز با استفاده از rss feeds مطالب سايت رو دنبال ميكنند رو هم بشماره؟

$_SERVER['HTTP_REFERER']
منظورم اينه كه افراد قبلا ادرس rss feeds يك سايت رو به مرورگر خود اضافه كردن و بعد از مدتي اين سايت به روز ميشه و توي مرورگر فرد يا برنامه ي خوراك خوان فرد مطالب سايت دريافت ميشه آيا ميشه با اين تابع اين موضوع رو فهميد؟
من تا حالا با اين تابع كار نكردم ميشه يه مثال ساده براش بزنيد؟
متشكرم.

MMSHFE
شنبه 15 بهمن 1390, 08:57 صبح
دوست عزیز، ['SERVER['HTTP_REFERER_$ یک تابع نیست. یک مقدار از آرایه SERVER_$ هست که فقط به شما میگه اسکریپت شما توسط چه صفحه ای درخواست شده. حالا برای شمارش، میتونید کارهای مختلفی انجام بدین. مثلاً جدولی از درخواست کنندگان درست کنید و هرموقع اسکریپت شما درخواست شد، ببینید درخواست کننده توی اون جدول هست یا نه و اگه نبود، یک رکورد براش اضافه کنید و اگه بود، به تعداد درخواستهای اون رکورد یک واحد اضافه کنید. این دیگه بستگی به نوع استفاده شما از مقدار مذکور داره. درصورت امکان، کد PHP تولید کننده RSS Feed خودتون رو بگذارین تا روی همون توضیح بدم چه تغییراتی باید ایجاد کنید. موفق باشید.

ravand
شنبه 15 بهمن 1390, 12:38 عصر
اوني كه آي پي افراد رو ثبت ميكرد اينه:

<?php
header("Content-Type: application/rss+xml; charset=utf-8");
DEFINE ('DB_USER', 'root');
DEFINE ('DB_PASSWORD', '');
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME', 'cms2');
$rssfeed = '<?xml version="1.0" encoding="utf-8"?>';
$rssfeed .= '<rss version="2.0">';
$rssfeed .= '<channel>';
$rssfeed .= '<title>تگ قالب</title>';
$rssfeed .= '<link>http://localhost/cms/nicEdit/ghaleb/tag.php</link>';
$rssfeed .= '<description>This is an example RSS feed</description>';
$rssfeed .= '<language>fa</language>';
$rssfeed .= '<copyright>Copyright (C) 2009 mywebsite.com</copyright>';
$connection = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD)
or die('Could not connect to database');
mysql_select_db(DB_NAME)
or die ('Could not select database');
mysql_query('SET NAMES \'utf8\'');
$ip=$_SERVER['REMOTE_ADDR'];
$time=time();
$query="INSERT INTO tbl_ip(`ip`,`time`) VALUES('$ip','$time')";
mysql_query($query);
$query = "SELECT * FROM jadval ORDER BY id DESC";
$result = mysql_query($query) or die ("Could not execute query");
while($row = mysql_fetch_array($result)) {
extract($row);
$rssfeed .= '<item>';
$rssfeed .= '<title>' . $title . '</title>';
$rssfeed .= '<description>' . $description . '</description>';
$rssfeed .= '<link>' . $link . '</link>';
$rssfeed .= '<pubDate>' . date("D, d M Y H:i:s O") . '</pubDate>';
$rssfeed .= '</item>';
}
$rssfeed .= '</channel>';
$rssfeed .= '</rss>';
echo $rssfeed;
?>

MMSHFE
شنبه 15 بهمن 1390, 17:16 عصر
ابتدا یک جدول به اسم tbl_ref با سه فیلد id و ref و count ایجاد کنید که فیلد id کلید اصلی و AUTO_INCREMENT هست. بعد کد زیر رو امتحان کنید:


<?php
header('Content-Type: application/rss+xml; charset=utf-8');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_HOST', 'localhost');
define('DB_NAME', 'cms2');
$connection = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD) or die('Could not connect to database');
mysql_select_db(DB_NAME) or die ('Could not select database');
mysql_query('SET NAMES \'utf8\'');

// Store IP and Time of request in DB
$ip = &$_SERVER['REMOTE_ADDR'];
$time = time();
$query = "INSERT INTO tbl_ip(`ip`,`time`) VALUES('{$ip}','{$time}')";
mysql_query($query);

// Store Referer and it's count in DB
$ref = &$_SERVER['HTTP_REFERER'];
$query = "SELECT * FROM `tbl_ref` WHERE (`ref`='{$ref}')";
if($query) {
if(mysql_num_rows > 0) {
mysql_query("UPDATE `tbl_ref` SET `count`=`count`+1 WHERE (`ref`='{$ref}')");
}
else {
mysql_query("INSERT INTO `tbl_ref`(`ref`,`time`) VALUES('{$ref}','1')");
}
}

// Create RSS
$rssfeed = '<?xml version="1.0" encoding="utf-8"?>';
$rssfeed .= '<rss version="2.0">';
$rssfeed .= '<channel>';
$rssfeed .= '<title>تگ قالب</title>';
$rssfeed .= '<link>http://localhost/cms/nicEdit/ghaleb/tag.php</link>';
$rssfeed .= '<description>This is an example RSS feed</description>';
$rssfeed .= '<language>fa</language>';
$rssfeed .= '<copyright>Copyright (C) 2009 mywebsite.com</copyright>';
$query = "SELECT * FROM `jadval` ORDER BY `id` DESC";
$result = mysql_query($query) or die ('Could not execute query');
while($row = mysql_fetch_array($result)) {
extract($row);
$rssfeed .= '<item>';
$rssfeed .= '<title>' . $title . '</title>';
$rssfeed .= '<description>' . $description . '</description>';
$rssfeed .= '<link>' . $link . '</link>';
$rssfeed .= '<pubDate>' . date("D, d M Y H:i:s O") . '</pubDate>';
$rssfeed .= '</item>';
}
$rssfeed .= '</channel>';
$rssfeed .= '</rss>';
echo $rssfeed;
?>

توضیحات لازم رو گذاشتم. دقت کنید که اگه Referer رو توی جدول پیدا کنه، به تعدادش یکی اضافه میکنه و اگه پیدا نکنه، یک رکورد براش میسازه با تعداد 1 تا در دفعات بعدی، تعدادش بیشتر بشه.
راستی، اون & رو هم قبل از ip$ و ref$ برای این گذاشتم که یک ارجاع به همون متغیر بعد از علامت = رو ذخیره کنن و درواقع همون متغیر باشن نه یک کپی از اون (صرفه جویی در حافظه).
موفق باشید.

ravand
شنبه 15 بهمن 1390, 21:35 عصر
كاري كه كردم اين بود بعد از اين كارهاي كه شما گفتيد ، من امدم يه مطلب رو توي سايتي كه در لوكال هاستم بود ارسال كردم . بدون اينكه وارد صفحه ي rss feeds برم در همين پنجره ي باز اكسپلورر و در يك صفحه ي خالي (Blank Page)دكمه ي ctrl و j رو گفتم و روي يكي از آيكن هاي نارنجي راست كليك كردم و گزينه ي Refresh All رو زدم بعد رفتم توي جدول tbl_ip و روي مشاهده زدم و ديدم id،ip،time ثبت شده .
اين يعني كد شما درست كار ميكنه.
از لطف شما متشكرم.
يه دنيا ممنون