|
1
|
|
|
<?php |
|
2
|
|
|
/** |
|
3
|
|
|
* Created by Gorlum 11.06.2017 9:58 |
|
4
|
|
|
*/ |
|
5
|
|
|
|
|
6
|
|
|
namespace Core; |
|
7
|
|
|
|
|
8
|
|
|
|
|
9
|
|
|
use \SN; |
|
10
|
|
|
|
|
11
|
|
|
class SnBootstrap { |
|
12
|
|
|
|
|
13
|
|
|
public static function install_benchmark() { |
|
14
|
|
|
register_shutdown_function(function () { |
|
15
|
|
|
if (defined('IN_AJAX')) { |
|
16
|
|
|
return; |
|
17
|
|
|
} |
|
18
|
|
|
|
|
19
|
|
|
global $user, $locale_cache_statistic; |
|
|
|
|
|
|
20
|
|
|
|
|
21
|
|
|
$now = microtime(true); |
|
22
|
|
|
$totalTime = round($now - SN_TIME_MICRO, 6); |
|
23
|
|
|
!defined('SN_TIME_RENDER_START') ? define('SN_TIME_RENDER_START', microtime(true)) : false; |
|
24
|
|
|
$executionTime = round(SN_TIME_RENDER_START - SN_TIME_MICRO, 6); |
|
25
|
|
|
$displayTime = round($now - SN_TIME_RENDER_START, 6); |
|
26
|
|
|
|
|
27
|
|
|
print( |
|
28
|
|
|
'<div id="benchmark" class="benchmark"><hr>[' . SN_TIME_SQL . '] ' |
|
29
|
|
|
. 'Benchmark ' . $totalTime . 's' |
|
30
|
|
|
. (defined('SN_TIME_RENDER_START') |
|
31
|
|
|
? |
|
32
|
|
|
" (exec: {$executionTime}s" . |
|
33
|
|
|
", display: {$displayTime}s" |
|
34
|
|
|
. (class_exists('SN') && is_object(SN::$db) ? ', DB: ' . round(SN::$db->time_mysql_total, 6) . 's' : '') |
|
35
|
|
|
. ")" |
|
36
|
|
|
: '' |
|
37
|
|
|
) |
|
38
|
|
|
. ', memory: ' . number_format(memory_get_usage() - SN_MEM_START) |
|
39
|
|
|
. (!empty($locale_cache_statistic['misses']) ? ', LOCALE MISSED' : '') |
|
40
|
|
|
. '</div>'); |
|
41
|
|
|
if ($user['authlevel'] >= 2 && file_exists(SN_ROOT_PHYSICAL . 'badqrys.txt') && @filesize(SN_ROOT_PHYSICAL . 'badqrys.txt') > 0) { |
|
42
|
|
|
echo '<a href="badqrys.txt" target="_blank" style="color:red">', 'HACK ALERT!', '</a>'; |
|
43
|
|
|
} |
|
44
|
|
|
|
|
45
|
|
|
if (!empty($locale_cache_statistic['misses'])) { |
|
46
|
|
|
print('<!--'); |
|
47
|
|
|
pdump($locale_cache_statistic); |
|
48
|
|
|
print('-->'); |
|
49
|
|
|
} |
|
50
|
|
|
}); |
|
51
|
|
|
} |
|
52
|
|
|
|
|
53
|
|
|
public static function init_debug_state() { |
|
54
|
|
|
if ($_SERVER['SERVER_NAME'] == 'localhost' && !defined('BE_DEBUG')) { |
|
55
|
|
|
define('BE_DEBUG', true); |
|
56
|
|
|
} |
|
57
|
|
|
// define('DEBUG_SQL_ONLINE', true); // Полный дамп запросов в рил-тайме. Подойдет любое значение |
|
|
|
|
|
|
58
|
|
|
define('DEBUG_SQL_ERROR', true); // Выводить в сообщении об ошибке так же полный дамп запросов за сессию. Подойдет любое значение |
|
59
|
|
|
define('DEBUG_SQL_COMMENT_LONG', true); // Добавлять SQL запрос длинные комментарии. Не зависим от всех остальных параметров. Подойдет любое значение |
|
60
|
|
|
define('DEBUG_SQL_COMMENT', true); // Добавлять комментарии прямо в SQL запрос. Подойдет любое значение |
|
61
|
|
|
// Включаем нужные настройки |
|
62
|
|
|
defined('DEBUG_SQL_ONLINE') && !defined('DEBUG_SQL_ERROR') ? define('DEBUG_SQL_ERROR', true) : false; |
|
63
|
|
|
defined('DEBUG_SQL_ERROR') && !defined('DEBUG_SQL_COMMENT') ? define('DEBUG_SQL_COMMENT', true) : false; |
|
64
|
|
|
defined('DEBUG_SQL_COMMENT_LONG') && !defined('DEBUG_SQL_COMMENT') ? define('DEBUG_SQL_COMMENT', true) : false; |
|
65
|
|
|
|
|
66
|
|
|
if (defined('BE_DEBUG') || SN::$config->debug) { |
|
|
|
|
|
|
67
|
|
|
@define('BE_DEBUG', true); |
|
|
|
|
|
|
68
|
|
|
@ini_set('display_errors', 1); |
|
|
|
|
|
|
69
|
|
|
@error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED); |
|
|
|
|
|
|
70
|
|
|
} else { |
|
71
|
|
|
@define('BE_DEBUG', false); |
|
72
|
|
|
@ini_set('display_errors', 0); |
|
73
|
|
|
} |
|
74
|
|
|
|
|
75
|
|
|
} |
|
76
|
|
|
|
|
77
|
|
|
/** |
|
78
|
|
|
* @param \classConfig $config |
|
79
|
|
|
*/ |
|
80
|
|
|
public static function performUpdate(&$config) { |
|
81
|
|
|
$update_file = SN_ROOT_PHYSICAL . "includes/update.php"; |
|
82
|
|
|
if ( |
|
83
|
|
|
!file_exists($update_file) |
|
84
|
|
|
|| |
|
85
|
|
|
( |
|
86
|
|
|
filemtime($update_file) <= $config->db_loadItem('var_db_update') |
|
87
|
|
|
&& |
|
88
|
|
|
$config->db_loadItem('db_version') >= DB_VERSION |
|
89
|
|
|
) |
|
90
|
|
|
) { |
|
91
|
|
|
return; |
|
92
|
|
|
} |
|
93
|
|
|
|
|
94
|
|
|
if (defined('IN_ADMIN')) { |
|
95
|
|
|
sn_db_transaction_start(); // Для защиты от двойного запуска апдейта - начинаем транзакцию. Так запись в базе будет блокирована |
|
96
|
|
|
if (SN_TIME_NOW >= $config->db_loadItem('var_db_update_end')) { |
|
97
|
|
|
$config->db_saveItem('var_db_update_end', SN_TIME_NOW + ($config->upd_lock_time ? $config->upd_lock_time : 300)); |
|
98
|
|
|
sn_db_transaction_commit(); |
|
99
|
|
|
|
|
100
|
|
|
require_once($update_file); |
|
101
|
|
|
|
|
102
|
|
|
$current_time = time(); |
|
103
|
|
|
$config->db_saveItem('var_db_update', $current_time); |
|
104
|
|
|
$config->db_saveItem('var_db_update_end', $current_time); |
|
105
|
|
|
} elseif (filemtime($update_file) > $config->var_db_update) { |
|
106
|
|
|
$timeout = $config->var_db_update_end - SN_TIME_NOW; |
|
107
|
|
|
die( |
|
|
|
|
|
|
108
|
|
|
"Обновляется база данных. Рассчетное время окончания - {$timeout} секунд (время обновления может увеличиваться). Пожалуйста, подождите...<br /> |
|
109
|
|
|
Obnovljaetsja baza dannyh. Rasschetnoe vremya okonchanija - {$timeout} secund. Pozhalujsta, podozhdute...<br /> |
|
110
|
|
|
Database update in progress. Estimated update time {$timeout} seconds (can increase depending on update process). Please wait..." |
|
111
|
|
|
); |
|
112
|
|
|
} |
|
113
|
|
|
sn_db_transaction_rollback(); |
|
114
|
|
|
} else { |
|
115
|
|
|
die( |
|
|
|
|
|
|
116
|
|
|
'Происходит обновление сервера - пожалуйста, подождите...<br /> |
|
117
|
|
|
Proishodit obnovlenie servera - pozhalujsta, podozhdute...<br /> |
|
118
|
|
|
Server upgrading now - please wait...<br /> |
|
119
|
|
|
<a href="admin/overview.php">Admin link</a>' |
|
120
|
|
|
); |
|
121
|
|
|
} |
|
122
|
|
|
} |
|
123
|
|
|
|
|
124
|
|
|
} |
|
125
|
|
|
|
Instead of relying on
globalstate, we recommend one of these alternatives:1. Pass all data via parameters
2. Create a class that maintains your state