PDA

View Full Version : سوال: ایجاد یه سیستم آمارگیری مثل وب گذر اما با استقاده از پی اچ پی



idocsidocs
پنج شنبه 28 مهر 1390, 13:27 عصر
من می خوام یه سیستم آمارگیری شبیه به وب گذر درست کنم. اما بجای جاوا اسکریپت می خوام از پی اچ پی استفاده کنم.

لطفا بگید که وقتی یه بازدید کننده وارد یکی از سایتهایی می شه که از اسکریپت من استفاده می کنه، چطور باید اطلاعات آماری اون بازدید کننده رو برای سایت خودم بفرستم و توی دیتابیس ذخیره کنم؟

Reza1607
پنج شنبه 28 مهر 1390, 13:51 عصر
به نظرم بايد از ajax استفاده كني تا نياز نباش براي ارسال داده ها به سرورت سايت طرف رفرش بخوره

idocsidocs
پنج شنبه 28 مهر 1390, 13:55 عصر
به نظرم بايد از ajax استفاده كني تا نياز نباش براي ارسال داده ها به سرورت سايت طرف رفرش بخوره

آژاکس نمی تونه به سرورهایی غیر از سروری که فایل رو باز کرده متصل بشه و روش شما برای اینکار عملی نیست.

MSN_Issue
پنج شنبه 28 مهر 1390, 16:02 عصر
سلام
ایده ی کلی(البته اون چیزی که به ذهن من میرسید) رو براتون ضمیمه کردم .
اول دیتابیس رو بسازید (کوئری-شو ضمیمه کردم)

بعد دو فایل a.php و index.php رو بذارید توی یه پروژه (مثلا به اسم test) توی پوشه ی www (اگه از ومپ استفاده میکنی)

حالا توی مرورگر فایل index.php رو اجرا کن (تایپ کن : http://localhsost/test/index.php)

بعد یه سری به دیتابیس بزن (به کمک phpmyadmin ):چشمک: ...
میبینی که یک واحد به رکورد علی توی جدول tbl اضافه شده ... (با هر بار اجرای فایل ایندکس یه واحد به اون اضافه میشه )

دیگه بقیه ی کاراش با خودته ...

idocsidocs
پنج شنبه 28 مهر 1390, 16:12 عصر
ایده ی کلی(البته اون چیزی که به ذهن من میرسید) رو براتون ضمیمه کردم .من می خوام اسکریپت آمارگیری روی سایتهای دیگه ای نصب بشه، هر بازدیدکننده که وارد سایت بشه، اطلاعات توی دیتابیسی که توی سایت من هست ذخیره بشن.

یعنی اطلاعات از یه سایت به سایت من فرستاده بشن و توی دیتابیس ذخیره بشن.

برای این کار باید چه راه حلی داشته باشم؟

MSN_Issue
پنج شنبه 28 مهر 1390, 16:18 عصر
امیدوارم فایلی رو که ضمیمه کردم حداقل یک بار extract و open کرده باشید ...
چون در این صورت و با باز کردن فایل ایندکس می دیدی که جریان از چه قراره !!!

Unique
پنج شنبه 28 مهر 1390, 16:29 عصر
من می خوام یه سیستم آمارگیری شبیه به وب گذر درست کنم. اما بجای جاوا اسکریپت می خوام از پی اچ پی استفاده کنم.

دلیل استفاده از javascript این نیست که باهاش کل سیستم آمارگیری را بنویسند ! از javascript استفاده میشه تا یکسری اطلاعات لازم را برای سایت خودشون که از توی Request گیر نمیاد ارسال کنند، مثلا اینکه رزولوشن شخص یا اینکه Color Depth ایشون چقدره ! روشش هم خیلی آسونه و نیاز به ajax نداره ! (اصلا شما نمیتونید غیر از سایت خودتون با javascript به یک سایت دیگه اطلاعات بفرستین !) شما کافیه با استفاده از یک تگ IMG ناقابل هر چی دوست دارین به سایتتون بفرستین و ذخیره کنین !

idocsidocs
پنج شنبه 28 مهر 1390, 17:31 عصر
شما کافیه با استفاده از یک تگ IMG ناقابل هر چی دوست دارین به سایتتون بفرستین و ذخیره کنین !
تقریبا متوجه شدم که منظورتون چیه ولی اگه امکانش هست کمی بیشتر در مورد این تگ img جادویی توضیح بدید.

سوال دیگه: اگر از این روش استفاده کنیم، ایا موتورهای جستجو متوجه می شن که اطلاعات بین وب سایتها رد و بدل می شه؟

Unique
جمعه 29 مهر 1390, 00:10 صبح
توضیح نمیخواد با استفاده از javascript یک تگ img توی صفحه کاربر ایجاد میشه که src را یک فایل php تعیین میکنید و اطلاعات اضافی را با ارسال GET میگیرین و اطلاعات کلی را از SERVER_$ در نهایت هم Logo خودتون را به کاربر نشون میدین !


سوال دیگه: اگر از این روش استفاده کنیم، ایا موتورهای جستجو متوجه می شن که اطلاعات بین وب سایتها رد و بدل می شه؟
چه اهمیتی داره ؟ مثل یک TAG ساده IMG هست که فقط داره از روی هاست شما لود میشه ! شما فقط میخوای آمار Client را بگیری !

rezakho
جمعه 29 مهر 1390, 00:54 صبح
سلام
باید یک اسکریپت javascript را به وسیله تگ <script> یا <iframe> روی سایت مقصد بزاری تا هنگام لود شدن روی مرورگر بازدید کننده اجرا بشه.
اگر مفهوم نبود بگو تا برات مثال بفرستم :)

idocsidocs
جمعه 29 مهر 1390, 01:04 صبح
با استفاده از javascript یک تگ img توی صفحه کاربر ایجاد میشه که src را یک فایل php تعیین میکنید
من نمی خوام از کد جاوا اسکریپت استفاده کنم و فقط می خوام که به کاربرها بگم که تگ (یا بهتره بگم لوگوی سایت خودم) رو توی صفحاتشون قرار بدن.
آیا بدون جاوا اسکریپت می شه چین کاری کرد؟


چه اهمیتی داره ؟ مثل یک TAG ساده IMG هست که فقط داره از روی هاست شما لود میشه ! شما فقط میخوای آمار Client را بگیری !
به هر حال باید بدونم که موتورهای جستجو متوجه رد و بدل شدن اطلاعات می شن یا نه. اگر در این زمینه اطلاعاتی دارید خوشحال می شم که راهنماییم کنید.

idocsidocs
جمعه 29 مهر 1390, 01:07 صبح
اگر مفهوم نبود بگو تا برات مثال بفرستم :) اگر یه مثال یا آموزش کامل بهم بدین خیلی عالیه چون دونستن چنین روشی مورد نیاز هست.

سوالی که دارم اینه که بدون جاوا اسکریپت و آی فریم هم می شه چنین کاری کرد؟

rezakho
شنبه 30 مهر 1390, 03:20 صبح
برات نوشتم، چند بار
امیدوارم زودتر تایید بشه:عصبانی++:

idocsidocs
شنبه 30 مهر 1390, 11:29 صبح
برات نوشتم، چند بار
امیدوارم زودتر تایید بشهچی تایید بشه؟

Unique
شنبه 30 مهر 1390, 15:07 عصر
من نمی خوام از کد جاوا اسکریپت استفاده کنم و فقط می خوام که به کاربرها بگم که تگ (یا بهتره بگم لوگوی سایت خودم) رو توی صفحاتشون قرار بدن.
آیا بدون جاوا اسکریپت می شه چین کاری کرد؟

من که گفتم با یک تگ IMG میشه انجام داد ! اما مشکل شما اینه که فکر میکنی کاربر باید javascript بدونه ! اما اینطور نیست یک copy و paste سادست ! اما برای IMG تگ که خیلی راحته !

idocsidocs
شنبه 30 مهر 1390, 15:28 عصر
من که گفتم با یک تگ IMG میشه انجام داد ! اما مشکل شما اینه که فکر میکنی کاربر باید javascript بدونه ! اما اینطور نیست یک copy و paste سادست ! اما برای IMG تگ که خیلی راحته ! این روش اسم خاصی نداره؟

rezakho
شنبه 30 مهر 1390, 17:06 عصر
سلام

چی تایید بشه؟
نمی دونم، هر وقت تو پست هام کد هست بعد از ارسال، میگه پست های این بخش بعد از تایید مدیر قابل دیدن هستند
بگذریم، سعی می کنم یه جوری، تکه تکه، بفرستمشون :)

دوستمون unique درست میگه
میشه بدون استفاده از جاوا اسکریپت یک سری اطلاعات پایه را از کامپیوتر کاربر گرفت

rezakho
شنبه 30 مهر 1390, 17:08 عصر
مثلا یک صفحه php درست می کنیم و داخلش کد های زیر را استفاده می کنیم

// محتویات فایل img.php
// اطلاعات مختصری درباره مرورگر و سیستم عامل کاربر
// تمام اطلاعات فرضی هستند
echo $_SERVER["HTTP_USER_AGENT"]; // Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
echo $_SERVER["HTTP_ACCEPT"]; // text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
echo $_SERVER["HTTP_ACCEPT_LANGUAGE"]; // en-us,en;q=0.5
echo $_SERVER["HTTP_ACCEPT_ENCODING"]; // gzip, deflate
echo $_SERVER["HTTP_ACCEPT_CHARSET"]; // ISO-8859-1,utf-8;q=0.7,*;q=0.7

// آدرس آی پی کاربر
// گاهی اوقات نیاز به کد بیشتری خواهی داشت
echo $_SERVER["REMOTE_ADDR"]; // 248.362.325.36

// آدرس صفحه قبلی بازدید شده کاربر
// خیلی به درد می خوره
// مثلا ارجاعات از موتور های جستجو و کلمات جستجو شده را از همین می گیرند و غیره
echo $_SERVER["HTTP_REFERER"]; //

// اطلاعات دیگه که شاید به درد نخوره
echo $_SERVER["argv"]; //
echo $_SERVER["argc"]; //

// بعد از گرفتن اطلاعات یک عکس (همان لوگو) را در خروجی با تابع
// header()
// چاپ کن

rezakho
شنبه 30 مهر 1390, 17:11 عصر
حالا باید کد ل و گ و ی سایت شما در سایت مقصد گنجانده بشه
مثلا

// آدرس ل و گ و ی شما
<img src="http://yoursite.com/img.php" />

rezakho
شنبه 30 مهر 1390, 17:16 عصر
ببخشید یه کم درهمه
بالاخره قابل دیدن شد:لبخند:
البته به جای echo و چاپ کزدن، اطلاعات را میشه داخل پایگاه داده ذخیره کرد
امیدوارم مفید باشه
اگر خواستی کد با جاوا اسکریپت که جزئیات بیشتری را میده، را هم می ذارم.

idocsidocs
شنبه 30 مهر 1390, 17:30 عصر
اگر خواستی کد با جاوا اسکریپت که جزئیات بیشتری را میده، را هم می ذارم.
بله اگر آموزش در این زمینه دارید لطفا آموزشتون رو اینجا قرار بدید.
همچنین می شه بگید اسم این روش چیه و از اونجا که به این روش می شه همه اسکریپتهای سایتهای دیگه رو اجرا کرد، آیا این روش خطر امنیتی برای وب سایت نداره؟

rezakho
شنبه 30 مهر 1390, 17:43 عصر
در مورد اسم روش چیزی نمیدونم
ولی دقت کنید که فقط میشه کد جاوا اسکریپت را (البته اگر جاوا اسکریپت استفاده کنید) روی رایانه کاربر اجرا کرد، که سایت های ارائه دهنده آمار باید این موضوع را به کاربر اطلاع دهند.
اگر چه با این زبان میشه اطلاعاتی نظیر کوکی ها رو به سرقت برد (شما هستید که می تونید به سرقت ببرید نه کاربر) ولی با توجه به اطمینان ضمنی به سایت های ارائه آمار، این کار متداول هست.

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

idocsidocs
یک شنبه 01 آبان 1390, 00:29 صبح
چشم، سعی می کنم تا فردا برات بفرستم منتظر آموزشتون هستم.

rezakho
یک شنبه 01 آبان 1390, 01:57 صبح
سلام
خوب، برای سیستم آمار که با جاوا اسکریپت کارکنه، ابتدا به یک کد جاوا اسکریپت احتیاج داریم که روی مرورگر کاربران اجرا بشه و اطلاعات مرورگر، سیستم عامل و ... را بدست بیاره.
برای این کار، کدی مثل زیر می نویسیم ( البته این کد هم ناقصه، هم ممکنه باگ داشته باشه، یعنی بعضی از موارد رو نتونه تشخیص بده :) ،توضیح کد هم بمونه برای بعد ) و به مدیر اون سایتی که می خواهیم ( و یا می خواهد ) که آمار سایتش رو داشته باشیم، میگیم که آقا این کد را جایی درون صفحه اصلی سایت بگذار.

<script>
var BrowserDetect = {
init: function () {
this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
this.version = this.searchVersion(navigator.userAgent)
|| this.searchVersion(navigator.appVersion)
|| "an unknown version";
this.OS = this.searchString(this.dataOS) || "an unknown OS";
},
searchString: function (data) {
for (var i=0;i<data.length;i++) {
var dataString = data[i].string;
var dataProp = data[i].prop;
this.versionSearchString = data[i].versionSearch || data[i].identity;
if (dataString) {
if (dataString.indexOf(data[i].subString) != -1)
return data[i].identity;
}
else if (dataProp)
return data[i].identity;
}
},
searchVersion: function (dataString) {
var index = dataString.indexOf(this.versionSearchString);
if (index == -1) return;
return parseFloat(dataString.substring(index+this.version SearchString.length+1));
},
dataBrowser: [
{
string: navigator.userAgent,
subString: "Chrome",
identity: "Chrome"
},
{ string: navigator.userAgent,
subString: "OmniWeb",
versionSearch: "OmniWeb/",
identity: "OmniWeb"
},
{
string: navigator.vendor,
subString: "Apple",
identity: "Safari",
versionSearch: "Version"
},
{
prop: window.opera,
identity: "Opera",
versionSearch: "Version"
},
{
string: navigator.vendor,
subString: "iCab",
identity: "iCab"
},
{
string: navigator.vendor,
subString: "KDE",
identity: "Konqueror"
},
{
string: navigator.userAgent,
subString: "Firefox",
identity: "Firefox"
},
{
string: navigator.vendor,
subString: "Camino",
identity: "Camino"
},
{ // for newer Netscapes (6+)
string: navigator.userAgent,
subString: "Netscape",
identity: "Netscape"
},
{
string: navigator.userAgent,
subString: "MSIE",
identity: "Explorer",
versionSearch: "MSIE"
},
{
string: navigator.userAgent,
subString: "Gecko",
identity: "Mozilla",
versionSearch: "rv"
},
{ // for older Netscapes (4-)
string: navigator.userAgent,
subString: "Mozilla",
identity: "Netscape",
versionSearch: "Mozilla"
}
],
dataOS : [
{
string: navigator.platform,
subString: "Win",
identity: "Windows"
},
{
string: navigator.platform,
subString: "Mac",
identity: "Mac"
},
{
string: navigator.userAgent,
subString: "iPhone",
identity: "iPhone/iPod"
},
{
string: navigator.platform,
subString: "Linux",
identity: "Linux"
}
]

};
BrowserDetect.init();

var clientData = {
browser : BrowserDetect.browser,
os : BrowserDetect.OS,
version : BrowserDetect.version,
platform : navigator.platform,
osid : navigator.oscpu,
cookie : navigator.cookieEnabled ? 'enable' : 'disable',
color : window.screen.colorDepth,
java : navigator.javaEnabled(),
screenWidth : screen.width,
screenHeight : screen.height
// سایر ویژگی ها
}

function startStat(){
var iframe = document.createElement('IFRAME');
iframe.style.display = 'none';
document.body.appendChild(iframe);

iframe.src = 'http://yoursite.com/stat.php?'+'browser='+clientData.browser+'&os='+clientData.os+'&version='+clientData.version+'&platform='+clientData.platform+'&osid='+clientData.osid+'&cookie='+clientData.cookie+'&color='+clientData.color+'&java='+clientData.java+'&screenWidth='+clientData.screenWidth+'&screenHeight='+clientData.screenHeight/* + سایر ویژگی ها */;

}
startStat();

</script>
سپس به کد php ای احتیاج داریم که مقادیر ارسال شده از طریق این کد را بگیره و مثلا در بانک ذخیره کنه و یا هر کار دیگری :)
کدی مثل زیر
البته این کد php دیگه روی سایت طرف نیست، بلکه روی سایت خودمونه، و باید داخل کد بالا به جای http://yoursite.com (http://%3Cfont%20color=%22red%22%3Eyoursite.com%3C/font%3E)/stat.php آدرس سایت خودمون رو بگذاریم.

$browser = $_GET[browser];
$os = $_GET[os];
$version = $_GET[version];
$platform = $_GET[platform];
$osid = $_GET[osid];
$cookie = $_GET[cookie];
$color = $_GET[color];
$java = $_GET[java];
$screenWidth = $_GET[screenWidth];
$screenHeight = $_GET[screenHeight];
این صفحه را با نام stat.php ذخیره کنید و با متغییر های دریافتی هر کاری که دوست دارید انجام بدید
نکته : کد اول یک فریم مخفی می سازه تا بتونه اطلاعات رو بفرسته.
البته به دلیل کمی وقت یه کم بد توضیح دادم، می دونم، دیگه ببخشید، سعی می کنم در پست های بعدی کد ها رو توضیح بدم :)

idocsidocs
یک شنبه 01 آبان 1390, 10:48 صبح
البته به دلیل کمی وقت یه کم بد توضیح دادم، می دونم، دیگه ببخشید، سعی می کنم در پست های بعدی کد ها رو توضیح بدم :)
مرسی از کدهاتون.

البته معمولا همه این کدها رو می ذارن توی فایلهای خارجی تا سرعت لود صفحه بیشتر بشه و حجم کدهای توی کمتر بشه.


نکته : کد اول یک فریم مخفی می سازه تا بتونه اطلاعات رو بفرسته.پس به دو روش می شه این کار رو کرد. یکی از طریق ایجاد تگ تصویر و یکی از طریق ایجاد iframe. این موضوع که گفتم درسته؟

rezakho
یک شنبه 01 آبان 1390, 13:55 عصر
البته معمولا همه این کدها رو می ذارن توی فایلهای خارجی تا سرعت لود صفحه بیشتر بشه و حجم کدهای توی کمتر بشه.بله کد جاوا اسکریپت بالا را می توان داخل یک فایل مثل stat.js داخل سرور خودمان گذاشت و فقط به کاربر این کد را داد


<script src="http://yoursite.com/stat.js" />
</script>
<script>
startStat();
</script>

دقت کنید که داخل فایل stat.js تگ script را پاک کنید و فراخوانی تابع startStat نیز از داخل این فایل حذف و به قسمت داده شده به مدیر سایت اضافه شده.

پس به دو روش می شه این کار رو کرد. یکی از طریق ایجاد تگ تصویر و یکی از طریق ایجاد iframe. این موضوع که گفتم درسته؟ باز هم بله :)
اگر از تگ تصویر و یا هر تگ دیگری که می تواند یک درخواست از سرور دیگری را بدهد، استفاده کنید، فقط اطلاعات پایه و اگر از روش دوم، یعنی از تگ های iframe یا و script استفاده کنید، اطلاعات جامع تری بدست خواهید آورد، البته هر کدام اطلاعات منحصر به فرد مخصوص خودشان را نیز دارند، مثل آدرس آی پی کاربر که باید با PHP گرفته شود و یا رزولیشن صفحه که با جاوا اسکریپت بدست می آید.
در کل باید از هر دو روش استفاده کرد تا جامع ترین اطلاعات بدست آورده شود.

idocsidocs
یک شنبه 01 آبان 1390, 14:45 عصر
اگر از تگ تصویر و یا هر تگ دیگری که می تواند یک درخواست از سرور دیگری را بدهد، استفاده کنید، فقط اطلاعات پایه و اگر از روش دوم، یعنی از تگ های iframe یا و script استفاده کنید، اطلاعات جامع تری بدست خواهید آورد، البته هر کدام اطلاعات منحصر به فرد مخصوص خودشان را نیز دارند، مثل آدرس آی پی کاربر که باید با PHP گرفته شود و یا رزولیشن صفحه که با جاوا اسکریپت بدست می آید.
اگر از تگ تصویر استفاده کنیم نمی تونیم اطلاعاتی مثل کوکی، آی پی و ... رو بگیریم؟

rezakho
یک شنبه 01 آبان 1390, 23:14 عصر
اگر از تگ تصویر استفاده کنیم نمی تونیم اطلاعاتی مثل کوکی، آی پی و ... رو بگیریم؟ آی پی را می توان ولی کوکی ها را خیر :)
به طور کلی، تقریبا فقط اطلاعات زیر را میتوان با ارجاع به سایت (همان روش تگ تصویر) دریافت کرد.


// اطلاعات مختصری درباره مرورگر و سیستم عامل کاربر
// تمام اطلاعات فرضی هستند
echo $_SERVER["HTTP_USER_AGENT"]; // Mozilla/5.0 (Windows NT 6.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
echo $_SERVER["HTTP_ACCEPT"]; // text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
echo $_SERVER["HTTP_ACCEPT_LANGUAGE"]; // en-us,en;q=0.5
echo $_SERVER["HTTP_ACCEPT_ENCODING"]; // gzip, deflate
echo $_SERVER["HTTP_ACCEPT_CHARSET"]; // ISO-8859-1,utf-8;q=0.7,*;q=0.7

// آدرس آی پی کاربر
// گاهی اوقات نیاز به کد بیشتری خواهی داشت
echo $_SERVER["REMOTE_ADDR"]; // 248.362.325.36

// آدرس صفحه قبلی بازدید شده کاربر
// خیلی به درد می خوره
// مثلا ارجاعات از موتور های جستجو و کلمات جستجو شده را از همین می گیرند و غیره
echo $_SERVER["HTTP_REFERER"]; //

// اطلاعات دیگه که شاید به درد نخوره
echo $_SERVER["argv"]; //
echo $_SERVER["argc"]; //

idocsidocs
یک شنبه 01 آبان 1390, 23:48 عصر
آی پی را می توان ولی کوکی ها را خیر :)دوست عزیز مرسی از آموزشتون. همه مطالب رو گفتید.
برای ایجاد امنیت از اسکریپتها باید چیکار کنیم؟ یعنی یه نفر می تونه یه ربات بنویسه و با یه حلقه، همه اسکریپتهای روی سایت من رو به همین شکل مرتب فراخوانی کنه و سایت منو از کار بندازه.

چه راهی هست تا از چنین چیزی جلوگیری کنیم؟

rezakho
دوشنبه 02 آبان 1390, 00:14 صبح
اگر اشتباه نکنم به این نوع حملات DOS , DDOS گفته میشه، و باز اگر اشتباه نکنم، تنها راه مقابله با این نوع حملات، تجهیزات سخت افزاری مخصوصی هست.
در این نوع حملات، هکر می تونه فقط درخواست هارو به صفحه اصلی بده، و این برای از کار انداختن کل سایت کافیه.
البته باید گفت که سرور ارائه آمار، باید هم خود سرور و هم پهنای باند، بسیار بالا باشند تا با چند صد درخواست اول از کار نیفتند.
امیدوارم درست جواب داده باشم، دوستان دیگه هم یاری برسونن :)