
نوشته اصلی توسط
Marshall
ببخشید اگه بخواهیم برای هر ip یک آدرس ارجاع ثبت بشه اون موقع باید تابع رو چطوری تعییر بدیم؟!
یعنی هر ip اولین صفحه ارجایی که باهاش اومده تا یک ساعت ثبت بشه!
و به نا به دلایلی که دیدم اگه کاربران از سایت دیگه اومده باشند آدرس ارجاع اونها رو اون سایتی که ازش اومدن ثبت می کنه در حالیکه من می خواستم آدرس ارجاع فقط متعلق به سایت خودم باشه برای همین به جای استفاده از $_SERVER['HTTP_REFERER'] از $_SERVER['QUERY_STRING']; استفاده کردم و دیدم اون چیزی که من انتظارش رو داشتم برآورده می کنه فقط در انتها می خوام برای هر ip یک $_SERVER['QUERY_STRING']; ثبت بشه یعنی هر ip صفحه $_SERVER['QUERY_STRING']; خودش رو داشته باشه و تا یک ساعت ثبت بشه!
ببین اینکاری که من دارم برای شما میکنم اصولی نیست
1.چون نیاز هست در چند فایل تغییر داده بشه
2.باید بدونم اصلا هدف چیه
3.باید دیباگ بشه کد
اگر مورد اول و دوم هم باشه این رفع اشکال برای شما نیست و بنوعی یک کار غیر اصولی هست
اما با اینحال من طوری کد رو نوشتم که نیاز نباشه در فایل کانفیگ شما تغییری بدید و همه حالات رو در نظر گرفتم (دیباگش با خودتون)
کد PHP:
<?php
if (!Yii::$app->cache->get( $_server['remote_addr'])){
Yii::$app->cache->set( $_server['remote_addr'], array('ip'=>$_server['remote_addr'] ,'ref'=>$_SERVER['HPPT_REFERER']), 60 * 60);
if (Yii::$app->cache->get( 'info')){
$info0=json_decode(Yii::$app->cache->get( 'info'));
}else{
$info0[]=null;
}
$info0[]=array('ip'=>$_server['remote_addr'] ,'ref'=>$_SERVER['HPPT_REFERER']);
$info_json=json_encode($info0);
Yii::$app->cache->set( 'info', $info_json , 60 * 60*3);
}else{
if (Yii::$app->cache->get( 'info')){
$info= json_decode(Yii::$app->cache->get( 'info'));
}else{
$info0[]=null;
}
}
if (count($info[0])){
foreach ($info as $key=>$value){
echo 'ip: '. $key .' refer: '.$value .'<br>';
}
}
?>