Доброй ночи, Гость! Представляем Вам наши форумы. Вы можете зарегистрироваться чтобы писать на форумах или зайдите под своим именем, если Вы уже регистрировались.
   
   


Форум
 CMS Koobi | Основная тема
         koobi 6

Похожие темы  |  Печать страницы

koobi 6


События Среда, 22.06.2011, 19:17

Status-X

Группа: Администратор
Cообщений: 3005
Регистрация: 23.10.2009
Город: Санкт-Петербург
Оптимизируем Func.Shortstats.php
Болтается у меня досих пор пара проектов на шестерке, и частенько хостеры матерятся на эти проекты хотя там очень многое переписано.
Сегодня после очередного стука хостера, убрал немного запросов.
Есть в шестерке такая функция как shortstats() находится в файле Func.Shortstats.php, выводит она статистику на всех страницах и делает аж 13 запросов в базу

Итак ее исходный код
Спойлер
PHP-код
function shortstats()
{
    global 
$db,$THEME$lang$area;
    
$tmpl = new Koobi("templates/");
    
$gestern mktime(000date("m"), date("d")-1date("Y"));
    
$sql $db->Query("SELECT SUM(visits) as VISITSALL FROM " PREFIX "_sitestats");
    
$row $sql->fetchrow();
    
$sql $db->Query("SELECT SUM(visits) as VISITSTODAY FROM " PREFIX "_sitestats WHERE datum='" date("d-m-Y") . "'");
    
$row2 $sql->fetchrow();
    
$sql $db->Query("SELECT SUM(visits) as VISITSMONTH  FROM " PREFIX "_sitestats WHERE mesec='" date("m") . "'  AND godd='" date("Y") . "'");
    
$row3 $sql->fetchrow();
    
$sql $db->Query("SELECT MAX(visits) as VISITSMAX FROM " PREFIX "_sitestats");
    
$row4 $sql->fetchrow();
    
$sql $db->Query("SELECT SUM(visits) as VISITSGESTERN FROM " PREFIX "_sitestats WHERE tag='" date("d"$gestern) . "' AND mesec='" date("m"$gestern) . "' AND godd='" date("Y"$gestern) . "'");
    
$row5 $sql->fetchrow();

    
$sql $db->Query("SELECT SUM(hits) as HITSTODAY FROM " PREFIX "_sitestats WHERE datum='" date("d-m-Y") . "'");
    
$row6 $sql->fetchrow();
    
$sql $db->Query("SELECT SUM(hits) as HITSMONTH  FROM " PREFIX "_sitestats WHERE mesec='" date("m") . "'  AND godd='" date("Y") . "'");
    
$row7 $sql->fetchrow();
    
$sql $db->Query("SELECT MAX(hits) as HITSMAX FROM " PREFIX "_sitestats");
    
$row8 $sql->fetchrow();
    
$sql $db->Query("SELECT SUM(hits) as HITSGESTERN FROM " PREFIX "_sitestats WHERE tag='" date("d"$gestern) . "' AND mesec='" date("m"$gestern) . "' AND godd='" date("Y"$gestern) . "'");
    
$row9 $sql->fetchrow();
    
$sql $db->Query("SELECT SUM(hits) as ALLHITS FROM " PREFIX "_sitestats");
    
$row10 $sql->fetchrow();

    
$sql_members $db->Query("SELECT uid FROM " PREFIX "_user WHERE ugroup!=2 AND show_public=1 ");
    
$num_members $sql_members->numrows();
    
$sql_posts $db->Query("SELECT id FROM " PREFIX "_f_post");
    
$num_posts $sql_posts->numrows();
    
$sql_threads $db->Query("SELECT id FROM " PREFIX "_f_topic");
    
$num_threads $sql_threads->numrows();

    
$tmpl->assign('allvisits'$row->VISITSALL);
    
$tmpl->assign('visitstoday'$row2->VISITSTODAY);
    
$tmpl->assign('visitstmonth'$row3->VISITSMONTH);
    
$tmpl->assign('visitsmax'$row->VISITSALL);
    
$tmpl->assign('visityesterday'$row5->VISITSGESTERN);

    
$tmpl->assign('hitstoday'$row6->HITSTODAY);
    
$tmpl->assign('hitstmonth'$row7->HITSMONTH);
    
$tmpl->assign('hitsmax'$row8->HITSMAX);
    
$tmpl->assign('hitsyesterday'$row9->HITSGESTERN);
    
$tmpl->assign('allhits'$row10->ALLHITS);

    
$tmpl->assign('num_members'$num_members);
    
$tmpl->assign('num_posts'$num_posts);
    
$tmpl->assign('num_threads'$num_threads);

    
$tmpl->assign('lang'$lang);
    
$tmpl->assign('area'$area);
    echo 
$tmpl->fetch("$THEME/other/stats.tpl");
}

Немного ее перепишем и будет выбирать данные из базы всего за один запрос

Спойлер
PHP-код
function shortstats() {
    global 
$db,$THEME$lang$area;
    
$tmpl = new Koobi("templates/");
    
$gestern mktime(000date("m"), date("d")-1date("Y"));
    
    
$sql $db->Query("SELECT SUM(visits) AS counter FROM " PREFIX "_sitestats  
     UNION ALL 
     SELECT SUM(visits) AS counter FROM " 
PREFIX "_sitestats WHERE datum='" date("d-m-Y") . "' 
     UNION ALL 
     SELECT SUM(visits) AS counter  FROM " 
PREFIX "_sitestats WHERE mesec='" date("m") . "'  AND godd='" date("Y") . "' 
     UNION ALL 
     SELECT MAX(visits) AS counter FROM " 
PREFIX "_sitestats
     UNION ALL 
     SELECT SUM(visits) AS counter FROM " 
PREFIX "_sitestats WHERE tag='" date("d"$gestern) . "' AND mesec='" date("m"$gestern) . "' AND godd='" date("Y"$gestern) . "' 
     UNION ALL 
     SELECT SUM(hits) AS counter FROM " 
PREFIX "_sitestats WHERE datum='" date("d-m-Y") . "' 
     UNION ALL 
     SELECT SUM(hits) AS counter FROM " 
PREFIX "_sitestats WHERE mesec='" date("m") . "'  AND godd='" date("Y") . "' 
     UNION ALL 
     SELECT MAX(hits) AS counter FROM " 
PREFIX "_sitestats 
     UNION ALL 
     SELECT SUM(hits) AS counter FROM " 
PREFIX "_sitestats WHERE tag='" date("d"$gestern) . "' AND mesec='" date("m"$gestern) . "' AND godd='" date("Y"$gestern) . "' 
     UNION ALL 
     SELECT SUM(hits) AS counter FROM " 
PREFIX "_sitestats 
     UNION ALL 
     SELECT COUNT(uid) AS counter FROM " 
PREFIX "_user WHERE ugroup!=2 AND show_public=1 
     UNION ALL 
     SELECT COUNT(id) AS counter FROM " 
PREFIX "_f_post 
     UNION ALL 
     SELECT COUNT(id) AS counter FROM " 
PREFIX "_f_topic");
    
$counter = array();
    while (
$row $sql->fetchrow()) array_push($counter$row);
    
$tmpl->assign('allvisits',      $counter[0]->counter);
    
$tmpl->assign('visitstoday',    $counter[1]->counter);
    
$tmpl->assign('visitstmonth',   $counter[2]->counter);
    
$tmpl->assign('visitsmax',      $counter[3]->counter);
    
$tmpl->assign('visityesterday'$counter[4]->counter);
    
$tmpl->assign('hitstoday',      $counter[5]->counter);
    
$tmpl->assign('hitstmonth',     $counter[6]->counter);
    
$tmpl->assign('hitsmax',        $counter[7]->counter);
    
$tmpl->assign('hitsyesterday',  $counter[8]->counter);
    
$tmpl->assign('allhits',        $counter[9]->counter);
    
$tmpl->assign('num_members',    $counter[10]->counter);
    
$tmpl->assign('num_posts',      $counter[11]->counter);
    
$tmpl->assign('num_threads',    $counter[12]->counter);

    
$tmpl->assign('lang'$lang);
    
$tmpl->assign('area'$area);
    echo 
$tmpl->fetch("$THEME/other/stats.tpl");
}




Отредактировано Status-X: 22.06.2011, 19:19:03




Пользователь офлайн
События Среда, 22.06.2011, 19:25

Status-X

Автор текущей темы
Группа: Администратор
Cообщений: 3005
Регистрация: 23.10.2009
Город: Санкт-Петербург
Избавляюсь от хлама оставшегося у меня от шестерки, все равно не помню для чего где что, а здесь может кому и пригодится

Forum_pic_Koobi6.rar хак для вывода загруженных изображений на форуме
movepost_koobi_6.rar хак добовляющий возможность перемещать посты на форуме или темы, даже не помню, но чего то в шестерке не было
Вложения
movepost_koobi_6.rar   (1 x загружено | 4,8 Кб)   
forum_pic_koobi6.rar   (1 x загружено | 3,2 Кб)   



Пользователь офлайн
События Среда, 22.06.2011, 19:27

Status-X

Автор текущей темы
Группа: Администратор
Cообщений: 3005
Регистрация: 23.10.2009
Город: Санкт-Петербург
Всем пользователям шестого куба. Для гостя открыт доступ к изменению данных профиля по адресу index.php?area=1&p=changedetails, при определенных манипуляциях из за путаницы в правах удается слить базу.
Исправление в файле changedetails.php
Ищем это

if(!@is_numeric(UID))

и меняем на это

if(!@is_numeric(UID) || UID == '2')

Прошелся по кубикам в сети, посмотрел, у всех открыто. Лечите пока способ высасывыния базы не проник в паблик

Так же в дополнение такая же замена в файлах misc.php 2 места и myorders.php 1 одноместо.
Все остальные вхождения if(!@is_numeric(UID)) в файлах завязаны с группами, что в принципе безопасно


Пользователь офлайн
События Среда, 22.06.2011, 19:46

Status-X

Автор текущей темы
Группа: Администратор
Cообщений: 3005
Регистрация: 23.10.2009
Город: Санкт-Петербург
Шестерка при обновлении любой страницы делает 35 запросов календаря на дни рождения.
Ну и нафига козе боян?Эти запросы нужны только в основном календаре. Избавляемся.

Файл Calendar.Class.php, ищем:

PHP-код
function CalendarBirthdays($tag,$monat,$jahr,$nolimit=''
  { 
    global 
$area
    global 
$THEME
    global 
$lang
    global 
$tmpl
    global 
$db
    global 
$Icon

меняем на:

PHP-код
function CalendarBirthdays($tag,$monat,$jahr,$nolimit=''

  if(
$_REQUEST['p']=='calendar'
  { 
    global 
$area
    global 
$THEME
    global 
$lang
    global 
$tmpl
    global 
$db
    global 
$Icon

ищем это:

PHP-код
    } else { 
        
$user_birth_today ''
        return 
$user_birth_today
    } 

меняем на это:

PHP-код
    } else { 
        
$user_birth_today ''
        return 
$user_birth_today
    } 
  } 



Пользователь офлайн
События Среда, 22.06.2011, 19:47

Status-X

Автор текущей темы
Группа: Администратор
Cообщений: 3005
Регистрация: 23.10.2009
Город: Санкт-Петербург
Еще одна вкусность
При каждом обновлении страницы календарь делает около 70 запросов в базу. Даже на тех страницах где он в боковой панели не отображается. Убираем запросы со страниц где его нет.
Корневой index.php ищем:

PHP-код
$d getdate(time()); 
$year = (isset($_REQUEST['jahr']) && $_REQUEST['jahr'] != '') ? (int)$_REQUEST['jahr'] : $d['year']; 
$month = (isset($_REQUEST['monat']) && $_REQUEST['monat'] != '') ? (int)$_REQUEST['monat'] : $d['mon']; 
$cal = new KoobiCalendar
$tmpl->assign('simple_calendar'$cal->getMonthView($month$year'calendar/calendar_small.tpl','1','small')); 

и заменяем на:

PHP-код
if($_REQUEST['p']!='shop' && $_REQUEST['p']!='showforums' && $_REQUEST['p']!='showforum' && $_REQUEST['p']!='showtopic' && $_REQUEST['p']!='calendar'

$d getdate(time()); 
$year = (isset($_REQUEST['jahr']) && $_REQUEST['jahr'] != '') ? (int)$_REQUEST['jahr'] : $d['year']; 
$month = (isset($_REQUEST['monat']) && $_REQUEST['monat'] != '') ? (int)$_REQUEST['monat'] : $d['mon']; 
$cal = new KoobiCalendar
$tmpl->assign('simple_calendar'$cal- >getMonthView($month$year'calendar/calendar_small.tpl','1','small')); 


Отредактировано Status-X: 22.06.2011, 19:48:21


Пользователь офлайн
События Среда, 22.06.2011, 19:52

Status-X

Автор текущей темы
Группа: Администратор
Cообщений: 3005
Регистрация: 23.10.2009
Город: Санкт-Петербург
Если на страницах кроме магазина Вы некакие опции магазина не используете, то способ ниже сильно сократит запросы к базе

В корневом index.php

ищем это
PHP-код
if(ISSHOP==1

    
$categs = array(); 
    
get_shop_categs_simple(0''$categs$area); 
    
$tmpl->assign('shopnavi'$categs); 

меняем на это

PHP-код
if(ISSHOP==&& $_REQUEST['p']=='shop'

    
$categs = array(); 
    
get_shop_categs_simple(0''$categs$area); 
    
$tmpl->assign('shopnavi'$categs); 



Пользователь офлайн
События Среда, 22.06.2011, 19:54

Status-X

Автор текущей темы
Группа: Администратор
Cообщений: 3005
Регистрация: 23.10.2009
Город: Санкт-Петербург
Небольшая правка

Для тех у кого SQL INJECTION PROTECT стоит.
Файл init.php

PHP-код
        case "weekstart" $return[$key] = (int)SQReplace($val); 
            break; 
        case 
"weekend" $return[$key] = (int)SQReplace($val); 
            break; 

меняем на это

PHP-код
        case "weekstart" $return[$key] = SQReplace($val); 
            break; 
        case 
"weekend" $return[$key] = SQReplace($val); 
            break; 


файл Calendar.Class.php

PHP-код
         $row->StartWeek mktime(000$month$d-7$year); 
    
$row->EndWeek mktime(235959$month$d-1$year); 

меняем на

PHP-код
         $row->StartWeek = (int)mktime(000$month$d-7$year); 
    
$row->EndWeek = (int)mktime(235959$month$d-1$year);



Пользователь офлайн
События Среда, 22.06.2011, 19:56

Status-X

Автор текущей темы
Группа: Администратор
Cообщений: 3005
Регистрация: 23.10.2009
Город: Санкт-Петербург
Решал я эту проблемку с кривыми никами при отправке личных сообщений. Косяк не в кубе косяк в смарти, функцию правил. Но при обновлении смарти все съехало назад, не упомнишь где че правил, потом что бы не заморачиваться и не зависеть от смарти применил другое решение:

Папка system.

Файл pn.php

PHP-код
if(isset($_REQUEST['to']) && $_REQUEST['to']!=""){ 
$tmpl->assign('tofromname'base64_decode($_REQUEST['to'])); 

заменить на

PHP-код
if(isset($_REQUEST['to']) && $_REQUEST['to']!=""){ 
$tmpl->assign('tofromname'urldecode($_REQUEST['to'])); 

Файл user.php

PHP-код
$tmpl->assign('pncode'base64_encode($row->uname)); 

заменить на

PHP-код
$tmpl->assign('pncode'urlencode($row->uname)); 


Файл userlist.php

PHP-код
if($row->user_canpn=="yes"){$usercanpn '<a href="/index.php?p=pn&amp;area='.$area.'&amp;action=new&amp;to='.base64_encode($row->uname).'"><img border="0" src="templates/'.$THEME.'/img/user_buttons/pn_small.gif" alt="" /></a>';} 

заменить на

PHP-код
if($row->user_canpn=="yes"){$usercanpn '<a href="/index.php?area='.$area.'&amp;p=pn&amp;action=new&amp;to='.urlencode($row->uname).'"><img border="0" src="templates/'.$THEME.'/img/user_buttons/pn_small.gif" alt="" /></a>';}



Пользователь офлайн
События Среда, 22.06.2011, 20:00

Status-X

Автор текущей темы
Группа: Администратор
Cообщений: 3005
Регистрация: 23.10.2009
Город: Санкт-Петербург
В общем то это все что нащел у себя по кубику что записывал, спрашивайте что вспомню отвечу, специально уже конечно копать не буду. Ну или ищите на нуледе или руборде там по шестерке я довольно много отвечал


Пользователь офлайн
События Суббота, 13.08.2011, 02:37

RASH

Группа: Пользователь
Ранг: Новичок
Cообщений: 51
Регистрация: 05.11.2009
Город: Москва
Есть грамотно нулленые файлы для кубика 6? Чтобы без стучалок и ссылок на создателя? Или подскажите какая сборка лучше всего зануллена и какие файлы заменить? Если помните, конечно... Смешно
Пользователь офлайн
События Суббота, 13.08.2011, 09:14

Status-X

Автор текущей темы
Группа: Администратор
Cообщений: 3005
Регистрация: 23.10.2009
Город: Санкт-Петербург
Вроде как Pure_CMS_6.2_RUS самая толковая сборка была


Пользователь офлайн
События Суббота, 13.08.2011, 15:34

RASH

Группа: Пользователь
Ранг: Новичок
Cообщений: 51
Регистрация: 05.11.2009
Город: Москва
Функция checkactive для сокращения запросов к базе
PHP-код

Добавляем в 
/inc/init.php:

//================================================== =====
$sql_active $db->Query("SELECT val,active FROM " PREFIX "_active");
$_CHECKACTIVE = array();
while (
$row $sql_active->fetchrow())
{
$_CHECKACTIVE[$row->val] = $row->active;
}
//================================================== =====


Заменяем существующую функцию checkactive в /inc/function.php на это:

PHP-код

function checkactive($param)
{
global 
$_CHECKACTIVE;
if (
$_CHECKACTIVE[$param] == 1) { return true; } else {return false;}
}


Для защиты папки шаблонов через htacces. Создаем файл htacces со следующим содержанием:
Код

<FilesMatch ".(tpl)$">
Order allow,deny
Deny from all
</FilesMatch>

и закачиваем его в папку templates

Может быть многие еще пользуются старыми версиями кубика, поэтому постараюсь выложить еще какие-нибудь заплатки и модули.
Кстати, Status, нет ли у вас готовых хаков для функционала 6-ки?

Ведь это Вы выкладывали хак для расширения комментирования (Спойлер и хайд)? Не знаю, по какой причине, но спойлер в этом хаке (лично у меня) не работает. Возможно, руборд что-то зажевал?

Отредактировано RASH: 14.08.2011, 01:02:12
Пользователь офлайн
События Понедельник, 29.08.2011, 16:38

RASH

Группа: Пользователь
Ранг: Новичок
Cообщений: 51
Регистрация: 05.11.2009
Город: Москва
Наткнулся на такой вот маленький косяк: в версии koobi 6.25 при просмотре информации профиля, внизу экрана появляется непонятная белая точка (причем активная она как флешка) Может быть Вы уже сталкивались с этим? Конечно, мелочь, и даже не заметна, но как жить с этим, я не знаю. Для наглядности предоставлю скрин экрана. Как можно это исправить?
Вложения
Пользователь офлайн
События Понедельник, 29.08.2011, 16:57

Status-X

Автор текущей темы
Группа: Администратор
Cообщений: 3005
Регистрация: 23.10.2009
Город: Санкт-Петербург
Цитата
Автор: RASH
Наткнулся на такой вот маленький косяк: в версии koobi 6.25 при просмотре информации профиля, внизу экрана появляется непонятная белая точка (причем активная она как флешка) Может быть Вы уже сталкивались с этим? Конечно, мелочь, и даже не заметна, но как жить с этим, я не знаю. Для наглядности предоставлю скрин экрана. Как можно это исправить?


Тут надо не скрин, а html код страницы смотреть, точка похожа на фрейм размером в 1 пиксел, не исключено что вредоносный код есть


Пользователь офлайн
События Понедельник, 29.08.2011, 22:00

RASH

Группа: Пользователь
Ранг: Новичок
Cообщений: 51
Регистрация: 05.11.2009
Город: Москва
В архив добавил файлы, которые, на мой взгляд, могут содержать в себе эту точку. Еще раз повторю: сборка koobi 6.25, и эта точка была до внесения каких-либо изменений в код. Если поможете или подскажете, где можно еще капать, я буду очень благодарен. Пересмотрел уже все пользовательские классы и скрипты. Жаль, что я даже не понимаю, что я ищу. Такая мелочь, но очень бесит.

Отредактировано RASH: 29.08.2011, 22:01:52
Вложения
status.zip   (3 x загружено | 15,7 Кб)   
Пользователь офлайн


Похожие темы  |  Печать страницы  |   Предыдущая тема  |   Следующая тема

Быстрый переход:  
 

 Сейчас на сайте


Пользователей: 1, Гостей: 2
EVM
Поисковые боты: 8
oBot(2), Inktomi Slurp, BingBot(4), Unknown Bot

 Статистика форума


  Темы Сообщения Пользователи
За сутки:
За неделю:
За месяц:
Всего:
Мы приветствуем нового участника: Lesya

 Дни рождения


kostia.vinnychuk (34)
Печать | Copyright © 2009 - 2016 Status-X All rights reserved | Powered by CMS Status-X 1.05 | Контакты