function showDebugInfo() { if (!is_devel()) { return; } require_once common_class('sql_highlighter'); global $engine_errors, $sql_queries, $sql_errors, $timers; $high = new TSqlHighlighter(); $time_sum = 0; if (!empty($sql_queries)) { foreach ($sql_queries as $k => $v) { $time_sum += $v['time']; $sql_queries[$k]['sql'] = $high->highlight($v['sql']); } } if (!empty($sql_errors)) { foreach ($sql_errors as $k => $v) { $sql_errors[$k]['sql'] = $high->highlight($v['sql']); } } $tpl =& Registry::get('TRusoft_View'); $tpl->template_dir = find_dir("../templates"); $ret = array('timers' => $timers, 'sql' => array('count' => count($sql_queries), 'time' => $time_sum), 'engine_errors' => $engine_errors, 'sql_queries' => $sql_queries, 'sql_errors' => $sql_errors); $tpl->assign($ret); return $tpl->render($tpl->template_dir . 'debug.tpl'); }
function Cache() { //if (CACHE_DATA === true){ require_once common_class('cache/data_cache'); //подключем alias require_once common_lib('data_cache'); // } //if (CACHE_PAGE === true){ require_once common_class('cache/page_cache'); //подключем alias //require_once(common_lib('page_cache')); //} //if (CACHE_BLOCKS === true){ require_once common_class('cache/block_cache'); //подключем alias //require_once(common_lib('block_cache')); //} }
function Edit() { set_time_limit(0); /** * Алгоритм обработки: - считываем все данные из таблицы stat_temp_log и идем по ним построчно - вносим данные в глобальные таблицы (алгоритм, как раньше) - удаляем строку - в конце удаляем временные таблицы (наверное, которые по дате не совпадают, можно оставить) */ include_once common_class('stat'); $stat =& Registry::get('TStatClass'); $sessions = $updates = $times = array(); $columns = sql_getRows('SHOW COLUMNS FROM ' . STAT_SESSIONS_TABLE, true); if (!isset($columns['host'])) { sql_query("ALTER TABLE " . STAT_SESSIONS_TABLE . " ADD `host` VARCHAR( 255 ) NOT NULL ;"); sql_query("UPDATE " . STAT_SESSIONS_TABLE . " SET host=(SELECT p.host FROM " . STAT_PAGES_TABLE . " AS p, " . STAT_LOG_TABLE . " AS log WHERE log.page_id=p.id AND log.sess_id=sess_id LIMIT 1)"); } $total = sql_getValue("SELECT COUNT(*) FROM " . STAT_TEMP_TABLE); $i = 0; //ob_end_clean(); ob_end_clean(); header('Content-Encoding: text/html'); while (1) { $rows = sql_getRows("SELECT * FROM " . STAT_TEMP_TABLE . " ORDER BY time LIMIT 1000"); if ($i > 1 && (!$rows || count($rows) < 1000)) { break; } foreach ($rows as $key => $row) { $_key_ = md5($row['sess_id'] . '_' . $row['ip'] . '_' . $row['agent'] . '_' . $row['host']); $new = false; if (is_numeric($row['sess_id']) && strlen($row['sess_id']) != 32 && $row['sess_id'] != '0') { // Реальный ID сессии $sess_id = $row['sess_id']; } else { if (isset($sessions[$_key_]) && isset($times[$_key_]) && $row['time'] - $times[$_key_] <= STAT_SESS_TIME * 60) { // Ранее определили реальный ID и он не устарел еще $sess_id = $sessions[$_key_]; } else { // Во всех остальных случаях пытаемся найти подходящую сессию и если не находим - делаем новую сессию list($agent_id, $robot) = $stat->STAT_GetAgentId($row['agent']); $sess_id = sql_getValue("\n \t SELECT sess_id FROM " . STAT_SESSIONS_TABLE . "\n \t WHERE\n \t ip='{$row['ip']}' AND\n \t agent_id='{$agent_id}' AND\n \t host='{$row['host']}' AND\n \t time_last >= " . ($row['time'] - STAT_SESS_TIME * 60) . "\n \t LIMIT 1\n \t "); if (!$sess_id) { $sess_row = sql_getRow("SELECT sess_id, time_last FROM " . STAT_SESSIONS_TABLE . " WHERE ip='{$row['ip']}' AND agent_id='{$agent_id}' AND host='{$row['host']}' ORDER BY time_last DESC LIMIT 1"); $sess_id = $stat->newSession($row['ip'], $agent_id, $row['time'], $row['host'], $sess_row); if (!$sess_id) { return $this->Error(mysql_escape_string($sess_id)); } $new = true; } } } if (!isset($robot) || !$robot) { $sessions[$_key_] = $sess_id; $times[$_key_] = $row['time']; } list($page_id, $ref_id) = $stat->updateLog($sess_id, $row['time'], $row['document_status'], $row['host'], $row['uri'], $row['referer'], !$new); if (!$page_id) { return $this->Error('unknown page_id'); } $res = $stat->updateSession($sess_id, $row['time'], $row['document_status'], $row['client_id'], $page_id, $ref_id, $row['ip'], $new, $row['agent']); if ($res !== true) { return $this->Error(mysql_escape_string($res)); } sql_delete(STAT_TEMP_TABLE, $row['id']); if ($key % 10 == 0) { echo "<script>parent.process_log2.innerHTML += '.';</script>\n\n\n\n\n\n\n\n \r\n"; flush(); } } $i += count($rows); unset($rows, $row); echo "<script>parent.process_log.innerHTML = 'Done " . intval($i / $total * 100) . "%';</script>\n\n\n\n\n\n\n\n \r\n"; echo "<script>parent.process_log2.innerHTML = '';</script>\n\n\n\n\n\n\n\n \r\n"; flush(); } $sql = ' SELECT CONCAT( "DROP TABLE ", GROUP_CONCAT("`' . STAT_TMP_DB . '`.`", TABLE_NAME, "`") ) AS stmt FROM information_schema.TABLES WHERE TABLE_SCHEMA = "' . STAT_TMP_DB . '" AND TABLE_NAME LIKE "' . MYSQL_DB . '\\_%"'; $query = sql_getValue($sql); if ($query) { sql_query($query); } return "<script>window.parent.location.href = 'cnt.php?page=stat/stat_process';</script>"; }
define('ENGINE_TYPE', 'admin'); } if (!defined('ENGINE_OS')) { define('ENGINE_OS', PHP_OS == 'WINNT' ? false : true); } // Подключение Zend $zend_dir = array(dirname(__FILE__), 'common', 'classes'); set_include_path(get_include_path() . PATH_SEPARATOR . implode(DIRECTORY_SEPARATOR, $zend_dir)); //подгружаем дополнительный массив настроек require_once ENGINE_VERSION . '/cfg/admin.cfg.php'; /* устанавливается document_status */ $GLOBALS['document_status'] = 200; require_once PATH_COMMON_LIBS . 'error.lib.php'; require_once PATH_COMMON_LIBS . 'path.lib.php'; //подключаем класс реестра объектов include_once common_class('registry.php5'); /* устанавливает соединение с базой данных */ // @todo нормальный обработчик ошибок при коннекте к БД (require_once DB_CONNECT) or log_error('Cannot find file "' . DB_CONNECT . '"to connect to DB'); @mysql_connect(MYSQL_HOST, MYSQL_LOGIN, MYSQL_PASSWORD) or die(mysql_error()); @mysql_select_db(MYSQL_DB) or die(mysql_error()); @mysql_query("SET NAMES \"" . DB_SET_NAMES . "\""); /* подключаем встроенный дебаггер */ require_once common_lib('debug'); timer_start('all'); //подключаем вывод страницы в gz require_once common_lib('cache'); ob_start('cache_handler'); /* подключается библиотека функций */ require_once common_lib('utils'); /* подгружаем контроллер, инициализирующий общие классы, для сайта и админки */
// @todo нормальный обработчик ошибок при коннекте к БД (require_once DB_CONNECT) or log_error('Cannot find file "' . DB_CONNECT . '"to connect to DB'); @mysql_connect($mysql_host, $mysql_login, $mysql_password) or die(mysql_error()); @mysql_select_db($mysql_db) or die(mysql_error()); @mysql_query("SET NAMES \"" . DB_SET_NAMES . "\""); /* подключаем встроенный дебаггер */ require_once common_lib('debug'); timer_start('all'); //подключаем вывод страницы в gz require_once common_lib('cache'); ob_start('cache_handler'); /* подключается библиотека функций */ require_once common_lib('utils'); /* подгружаем контроллер, инициализирующий общие классы, для сайта и админки */ require_once common('main.init'); $main =& Registry::get('TMainInit'); require_once PATH_CONFIG . 'settings.cfg.php'; require_once PATH_CONFIG . 'lang.cfg.php'; /* Определение глобальных переменных */ require_once cfg('common'); if (strpos($_SERVER['REQUEST_URI'], '/hybridauth') !== false) { // Если пытаются открыть такой скрипт, значит надо его открыть - это скрипт авторизации через соц. сети include_once 'hybridauth/index.php'; die; } // Класс для работы со статистикой include_once common_class('stat'); require core('init'); timer_end('all'); echo showDebugInfo(); ob_end_flush();