InDiGo | Дата: Среда, 17.08.2011, 03:18 | Сообщение # 1 |
Administrator
Группа: Администраторы
Сообщений: 21
Статус: Offline
| 1) Запрос в базу Code CREATE TABLE IF NOT EXISTS `referrers` ( `id` int(11) NOT NULL auto_increment, `parse_url` varchar(255) NOT NULL, `parse_ref` varchar(255) NOT NULL, `uid` int(10) NOT NULL default '0', `ip` varchar(15) NOT NULL, `numb` int(11) NOT NULL default '0', `date` datetime NOT NULL default '0000-00-00 00:00:00', `lastdate` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`id`), UNIQUE KEY `downo` (`parse_url`,`parse_ref`,`ip`,`uid`), KEY `count` (`parse_url`), KEY `owner` (`uid`), KEY `time` (`date`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
2) в fucntions.php добавляем в конец: Code function parse_referer($cache=false) { global $refer_parse, $CURUSER; /// рефер данные $referer = (isset($_SERVER["HTTP_REFERER"]) ? htmlentities($_SERVER["HTTP_REFERER"]):""); if (!empty($referer)) $parse_site = parse_url($referer, PHP_URL_HOST); /// собственные данные о сайте $site_own = (($_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://").htmlspecialchars_uni($_SERVER['HTTP_HOST']); if (!empty($site_own)) $parse_owner = parse_url($site_own, PHP_URL_HOST); $parse_owner = str_replace("www.","", $parse_owner); /// сравниваем данные if(!empty($refer_parse) && !empty($parse_site) && !stristr($parse_site,$parse_owner) && ($parse_owner<>$parse_site)){ $ip = getip(); $ref = ($referer); $uid = $CURUSER["id"]; if (empty($uid)) $uid = 0; sql_query("INSERT INTO referrers (parse_url,parse_ref,uid,ip,date,numb,lastdate) VALUES (".sqlesc($parse_site).",".sqlesc($ref).",".sqlesc($uid).",".sqlesc($ip).",".sqlesc(get_date_time()).",1,'0000-00-00 00:00:00')");
if (!mysql_insert_id()){ sql_query("UPDATE referrers SET numb=numb+1,lastdate=".sqlesc(get_date_time())." WHERE uid=".sqlesc($uid)." AND ip=".sqlesc($ip)." AND parse_url=".sqlesc($parse_site)." AND parse_ref=".sqlesc($ref)) or sqlerr(__FILE__,__LINE__); }
if (date('i')>=30 && date('i')<=40) @unlink(ROOT_PATH."cache/block-top_refer.txt"); } }
3) Создаём папку cache с правами 777 в корне трекера или меняем пути так как нам нужно
4) Файл: referer.php - ложим в корень трекера и ставим ссылку на сайте там где нам нужно, доступ у файла начинается с модератора Code <? require "include/bittorrent.php"; dbconn(); loggedinorreturn(); if (get_user_class() <= UC_MODERATOR) stderr("Извините", "Доступа нет!"); $h = date('H'); // проверяем час if (($h >= 19)&&($h <= 21) || ($h >= 08)&&($h <= 10)){
global $refer_parse,$refer_day; if ($refer_parse=="1") {
if (empty($refer_day)) $refer_day = 2;
$secs = $refer_day * (86400 * 31); // удаляем старые данные старше N месяцев
$dt = get_date_time(gmtime() - $secs); sql_query("DELETE FROM referrers WHERE date < ".sqlesc($dt)) or sqlerr(__FILE__,__LINE__); } } $d = (empty($_GET["d"]) ? "":$_GET["d"]); $id = (empty($_GET["ass"]) ? "":$_GET["ass"]); $r = (!is_valid_id($_GET["r"]) ? "":$_GET["r"]); if (!empty($d) && !empty($id) && is_valid_id($id)) { if ($d=="one"){ stdhead("Удаление реферала с базы id: $id"); $a = sql_query("SELECT parse_url FROM referrers WHERE id=".sqlesc($id)." LIMIT 1") or sqlerr(__FILE__, __LINE__); $a2 = mysql_fetch_assoc($a); $count = $a2["parse_url"]; $ass = sql_query("SELECT min(id) AS mini FROM referrers AS ref WHERE ref.parse_url=(SELECT parse_url FROM referrers WHERE id=".sqlesc($id)." LIMIT 1) AND ref.id<>".sqlesc($id)." ORDER BY ref.id DESC") or sqlerr(__FILE__, __LINE__); $sqass = mysql_fetch_assoc($ass); if (!empty($sqass["mini"])) $r=$sqass["mini"]; if (!$count) { stdmsg("Извините", "Нет в базе $id"); echo "<script>setTimeout('document.location.href=\"".$_SERVER['PHP_SELF']."".($r<>$id ? "?id=".$r:"")."\"', 5000);</script>"; stdfoot(); die; } else { sql_query("DELETE FROM referrers WHERE id=".sqlesc($id)); stdmsg("Готово", "Удален <b>$count</b>"); echo "<script>setTimeout('document.location.href=\"".$_SERVER['PHP_SELF']."".($r<>$id ? "?id=".$r:"")."\"', 5000);</script>"; stdfoot(); die; } } elseif ($d=="all"){ stdhead("Удаление рефералов с базы id: $id"); $a = sql_query("SELECT parse_url FROM referrers WHERE id=".sqlesc($id)." LIMIT 1") or sqlerr(__FILE__, __LINE__); $a2 = mysql_fetch_assoc($a); $count = $a2["parse_url"];
if (!$count) { stdmsg("Извините", "Нет в базе рефералов для удаления по id $id"); echo "<script>setTimeout('document.location.href=\"".$_SERVER['PHP_SELF']."\"', 5000);</script>"; stdfoot(); die; } else { sql_query("DELETE FROM referrers WHERE parse_url=".sqlesc($count))or sqlerr(__FILE__, __LINE__); stdmsg("Готово", "Удалены все рефералы по сайту <b>$count</b>"); echo "<script>setTimeout('document.location.href=\"".$_SERVER['PHP_SELF']."\"', 5000);</script>"; stdfoot(); die; } } else echo "<script>setTimeout('document.location.href=\"".$_SERVER['PHP_SELF']."\"', 1000);</script>"; } $id = (empty($_GET["id"]) ? "":$_GET["id"]); if (!empty($id) && is_valid_id($id)) { $count = get_row_count("referrers","WHERE parse_url=(SELECT parse_url FROM referrers WHERE id=".sqlesc($id)." LIMIT 1)"); if (!empty($count)){ $ass = sql_query("SELECT min(id) AS mini,(SELECT parse_url FROM referrers WHERE id=".sqlesc($id)." LIMIT 1) AS parse_url FROM referrers AS ref WHERE ref.parse_url=(SELECT parse_url FROM referrers WHERE id=".sqlesc($id)." LIMIT 1) ORDER BY ref.id DESC") or sqlerr(__FILE__, __LINE__); $sqass = mysql_fetch_assoc($ass); $mini=$sqass["mini"]; stdhead("Просмотр реферала с ".$sqass["parse_url"]); } else { stdhead("Нет значения в базе для ".$id); stdmsg("Извините", "В базе нет значений для ".$id); echo "<script>setTimeout('document.location.href=\"".$_SERVER['PHP_SELF']."\"', 3000);</script>"; stdfoot(); exit; } echo "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"5\" class=\"embedded\">"; echo "<tr> <td class=colhead colspan=\"3\" width=\"100%\">Главная <a href=\"referer.php\" class=\"altlink_white\">Рефералов</a><br>Просмотр реф ссылок по ".$sqass["parse_url"]." (".$count.")</td></tr>"; echo "</table>"; $limited = 500; list($pagertop, $pagerbottom, $limit) = pager($limited, $count, "referer.php?id=".$id."&"); $a = sql_query("SELECT * FROM referrers AS ref WHERE ref.parse_url=(SELECT parse_url FROM referrers WHERE id=".sqlesc($id)." LIMIT 1) ORDER BY ref.id DESC $limit") or sqlerr(__FILE__, __LINE__); $c=1; echo $pagertop; echo "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"5\" class=\"embedded\">"; echo "<tr> <td class=colhead width=\"5%\">#</td> <td class=colhead align=\"left\">Реферальный откуда</td> <td class=colhead width=\"20%\" align=\"left\">ip адрес / количество</td> <td class=colhead width=\"20%\">Добавление / Обновление</td> </tr>\n"; while($sqlrow = mysql_fetch_assoc($a)){ if (!empty($sqlrow["uid"])){ $ara = sql_query("SELECT username,class FROM users WHERE id=".sqlesc($sqlrow["uid"])." ORDER BY last_access DESC LIMIT 1") or sqlerr(__FILE__, __LINE__); $row = mysql_fetch_assoc($ara); } if ($c%2==0) { $class="a"; $class2="b"; } else { $class="b"; $class2="a"; } $parse_url=htmlspecialchars_decode($sqlrow['parse_url']); $parse_ref=htmlspecialchars_decode($sqlrow['parse_ref']); $parse_ref = str_replace($parse_url,"<b><a href='".$parse_ref."' target='_blank'>".$parse_url."</a></b>",$parse_ref); echo " <tr align=center> <td class=".$class." width=\"5%\">".$sqlrow['id']."</td> <td class=".$class2." align=\"left\">".$parse_ref." <div align=\"right\">".(!empty($sqlrow["uid"]) ? "Вход от <a href=\"userdetails.php?id=".$sqlrow['uid']."\"> ".get_user_class_color($row['class'],$row['username'])."</a> ":"")." <a href=\"referer.php?d=one&ass=".$sqlrow['id']."&r=".$mini."\"><font color=red alt=\"Удалить этот реферал\">X</font></a> </div> </td> <td class=".$class." width=\"20%\" align=\"left\"><a href=\"usersearch.php?ip=".$sqlrow['ip']."\">".$sqlrow['ip']."</a> <b>(".$sqlrow['numb'].")</b></td> <td class=".$class2." width=\"20%\">".normaltime($sqlrow["date"],true)." <br> ".($sqlrow["lastdate"]=="0000-00-00 00:00:00" ? "обновления нет":normaltime($sqlrow["lastdate"],true))."</td> </tr>\n"; ++$c; unset($row['class'],$row['username']); } echo "</table>"; echo $pagerbottom; stdfoot(); die; } stdhead("ТОП сайтов, от которых мы получаем посетителей"); $count = get_row_count("referrers"); $a = sql_query("SHOW INDEXES FROM referrers WHERE Key_name = 'count'") or sqlerr(__FILE__, __LINE__); $sq= mysql_fetch_assoc($a); $count=$sq["Cardinality"]; if (!$count) { stdmsg("Извините", "В базе нет значений"); stdfoot(); exit; } echo "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"5\" class=\"embedded\">"; echo "<tr> <td class=colhead colspan=\"3\" width=\"100%\">Главная Рефералов <br>Все входы с внешних рессурсов, включая первое / последнее вхождение, ip адреса пользователей и количество входов по реферальному сайту.</td></tr>"; if (empty($refer_parse)) echo "<tr><td align=\"center\" class=\"a\" colspan=\"3\" width=\"100%\">Функция записи рефералов отключена.</td></tr>"; echo "</table>"; $limited = 300; list($pagertop, $pagerbottom, $limit) = pager($limited, $count, "referer.php?"); echo $pagerbottom; echo "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"5\" class=\"embedded\">"; echo "<tr> <td class=colhead width=\"10%\"># в базе</td> <td class=colhead>Реферальный сайт</td> <td class=colhead width=\"20%\">Дата добавления</td> </tr>\n"; $a = sql_query("SELECT *,(SELECT COUNT(*) FROM referrers WHERE referrers.parse_url=ref.parse_url) AS vhozh FROM referrers AS ref GROUP BY ref.parse_url ORDER BY ref.id DESC $limit") or sqlerr(__FILE__, __LINE__); $c=1; while($sqlrow = mysql_fetch_assoc($a)){ if ($c%2==0) { $class="a"; $class2="b"; } else { $class="b"; $class2="a"; } $parse_url=htmlspecialchars_decode($sqlrow['parse_url']); echo " <tr align=center> <td class=".$class." width=\"10%\">".$sqlrow['id']."</td> <td class=".$class2.">".$parse_url." <a href=\"referer.php?id=".$sqlrow['id']."\" class=\"altlink_white\">(".$sqlrow['vhozh'].")</a> <div align=\"right\"> <a href=\"referer.php?d=all&ass=".$sqlrow['id']."\"><font color=red alt=\"Удалить с базы все рефералы по этому сайту\">X</font></a> </div> </td> <td class=".$class." width=\"20%\">".normaltime($sqlrow["date"],true)."</td> </tr>\n"; ++$c; } echo "</table>"; stdfoot(); ?> и block-top_refer.php - в папку blocks и подключаем его! Блок на кеше, путь сохранения кеша папка cache/ в корне трекера, также пути сменить можно. Code <? if (!defined('BLOCK_FILE')) { header("Location: ../index.php"); exit; } // начинаем кешировать $cacheStatFile = "cache/block-top_refer.txt"; $expire = 60*60; // 60 минут на кеш, после обновление if (file_exists($cacheStatFile) && filesize($cacheStatFile)<>0 && filemtime($cacheStatFile) > (time() - $expire)) { $content.=file_get_contents($cacheStatFile); } else { // тело - то, что кешируем - начало global $refer_parse;
if ($refer_parse==1){ $content .= "<table width=\"100%\" cellpadding=\"2\" cellspacing=\"0\" class=\"table>\"";
$content .= "<tr><td align=\"center\" class=\"colhead\">Топ 15</td></tr>"; $count = number_format(get_row_count("referrers"));
$maxdt = get_date_time(gmtime() - 86400*31); /// если месяц назад
$zapros = sql_query("SELECT parse_url, parse_ref, COUNT(*) AS coun FROM referrers WHERE date > ".sqlesc($maxdt)." GROUP BY parse_url ORDER BY (SELECT COUNT(*) FROM referrers AS rf WHERE rf.parse_url=referrers.parse_url AND date > ".sqlesc($maxdt).") DESC LIMIT 15") or sqlerr(__FILE__, __LINE__);
$number=0;
while ($row = mysql_fetch_array($zapros)) {
if ($number%2==0) { $class="a"; $class2="b"; } else { $class="b"; $class2="a"; } $parse_ref = htmlspecialchars_decode($row["parse_ref"]); $parse_url = htmlspecialchars_decode($row["parse_url"]); $content .= "<tr><td align=\"center\" class=\"".$class2."\"><a title=\"".$row["coun"]." посещений\" rel=\"nofollow\" href=\"".$parse_ref."\">".$parse_url."</a></td></tr>"; ++$number; } if ($number==0) { $content .= "<tr><td align=\"center\" class=\"$class2\">Данных нет</td></tr>"; } else $content .= "<tr><td align=\"center\" class=\"colhead\">Всего данных: ".$count."</td></tr>";
$content .= "</table>"; } else { $content .= "<table width=\"100%\" cellpadding=\"2\" cellspacing=\"0\" class=\"table>\""; $content .= "<tr><td align=\"center\" class=\"$class2\"><b>Функция отключенна</b></td></tr>"; $content .= "</table>"; }
$blocktitle = "Рефералы"; // тело - то, что кешируем - конец
$fp = fopen($cacheStatFile,"w"); if($fp) { fputs($fp, $content); fclose($fp); } } // заканчиваем кешировать ?> 5) - ставим вызов функции на файлы которые нам нужно чтобы с них шёл весь учёт посещалки! Если не хотите лишней мороки с поиском файлов то поставьте вызов в файл themes/имя вашей темы/stdhead.php примерно таким способом
Code <? parse_referer(""); ?> 6) добавляем ниже код в include/config.php Code $refer_parse = 1; // Включить рефер функцию (показ в блоке block-top_refer) поясняю: 1 - включено 2 - выключено $refer_day = 6; // Удалять истекшие рефер ссылки спустя N мес поясняю: 6 - число месяцев
я бы изменил мир, но бог не даёт исходники
|
|
| |