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
global
state, we recommend one of these alternatives:1. Pass all data via parameters
2. Create a class that maintains your state