/
common.php
210 lines (165 loc) · 6.86 KB
/
common.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
<?php
/**
* Copyright (C) 2008-2012 FluxBB
* based on code by Rickard Andersson copyright (C) 2002-2008 PunBB
* License: http://www.gnu.org/licenses/gpl.html GPL version 2 or higher
*/
if (!defined('PUN_ROOT'))
exit('The constant PUN_ROOT must be defined and point to a valid FluxBB installation root directory.');
// Define the version and database revision that this code was written for
define('FORUM_VERSION', '1.4.8');
define('FORUM_DB_REVISION', 15);
define('FORUM_SI_REVISION', 2);
define('FORUM_PARSER_REVISION', 2);
// Block prefetch requests
if (isset($_SERVER['HTTP_X_MOZ']) && $_SERVER['HTTP_X_MOZ'] == 'prefetch')
{
header('HTTP/1.1 403 Prefetching Forbidden');
// Send no-cache headers
header('Expires: Thu, 21 Jul 1977 07:30:00 GMT'); // When yours truly first set eyes on this world! :)
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache'); // For HTTP/1.0 compatibility
exit;
}
// Attempt to load the configuration file config.php
$flux_config = file_exists(PUN_ROOT.'config.php') ? require PUN_ROOT.'config.php' : array();
// Load the functions script
require PUN_ROOT.'include/functions.php';
// Load UTF-8 functions
require PUN_ROOT.'modules/utf8/php-utf8.php';
require PUN_ROOT.'modules/utf8/functions/trim.php';
require_once PUN_ROOT.'modules/utf8/utils/patterns.php'; // might be already loaded by the php-utf8.php file when using mbstring extension
require_once PUN_ROOT.'modules/utf8/utils/bad.php'; // might be already loaded by the php-utf8.php file when using mbstring extension
// Strip out "bad" UTF-8 characters
forum_remove_bad_characters();
// Reverse the effect of register_globals
forum_unregister_globals();
// If PUN isn't defined, config.php is missing or corrupt
if (empty($flux_config))
{
header('Location: install.php');
exit;
}
// Record the start time (will be used to calculate the generation time for the page)
$pun_start = get_microtime();
// Make sure PHP reports all errors when in debug mode
if (defined('PUN_DEBUG'))
error_reporting(E_ALL);
// Force POSIX locale (to prevent functions such as strtolower() from messing up UTF-8 strings)
setlocale(LC_CTYPE, 'C');
// Turn off magic_quotes_runtime
if (get_magic_quotes_runtime())
set_magic_quotes_runtime(0);
// Strip slashes from GET/POST/COOKIE/REQUEST/FILES (if magic_quotes_gpc is enabled)
if (!defined('FORUM_DISABLE_STRIPSLASHES') && get_magic_quotes_gpc())
{
function stripslashes_array($array)
{
return is_array($array) ? array_map('stripslashes_array', $array) : stripslashes($array);
}
$_GET = stripslashes_array($_GET);
$_POST = stripslashes_array($_POST);
$_COOKIE = stripslashes_array($_COOKIE);
$_REQUEST = stripslashes_array($_REQUEST);
if (is_array($_FILES))
{
// Don't strip valid slashes from tmp_name path on Windows
foreach ($_FILES AS $key => $value)
$_FILES[$key]['tmp_name'] = str_replace('\\', '\\\\', $value['tmp_name']);
$_FILES = stripslashes_array($_FILES);
}
}
// If a cookie name is not specified in config.php, we use the default (pun_cookie)
if (empty($cookie_name))
$cookie_name = 'pun_cookie';
// Load the cache module
require PUN_ROOT.'modules/cache/src/cache.php';
$cache = \fluxbb\cache\Cache::load($flux_config['cache']['type'], $flux_config['cache'], $flux_config['cache']['serializer']['type'], $flux_config['cache']['serializer']);
// Define a few commonly used constants
define('PUN_UNVERIFIED', 0);
define('PUN_ADMIN', 1);
define('PUN_MOD', 2);
define('PUN_GUEST', 3);
define('PUN_MEMBER', 4);
// Load the DB module
require PUN_ROOT.'modules/database/src/Database/Adapter.php';
$db_options = array_merge($flux_config['db'], array('debug' => defined('PUN_DEBUG')));
$db = Flux_Database_Adapter::factory($flux_config['db']['type'], $db_options);
// Start a transaction
$db->startTransaction();
// Load cached config
$pun_config = $cache->get('config');
if ($pun_config === \fluxbb\cache\Cache::NOT_FOUND)
{
$pun_config = array();
// Get the forum config from the DB
$query = $db->select(array('conf_name' => 'c.conf_name', 'conf_value' => 'c.conf_value'), 'config AS c');
$params = array();
$result = $query->run($params);
foreach ($result as $cur_config_item)
$pun_config[$cur_config_item['conf_name']] = $cur_config_item['conf_value'];
unset ($query, $params, $result);
$cache->set('config', $pun_config);
}
// Verify that we are running the proper database schema revision
/*if (!isset($pun_config['o_database_revision']) || $pun_config['o_database_revision'] < FORUM_DB_REVISION ||
!isset($pun_config['o_searchindex_revision']) || $pun_config['o_searchindex_revision'] < FORUM_SI_REVISION ||
!isset($pun_config['o_parser_revision']) || $pun_config['o_parser_revision'] < FORUM_PARSER_REVISION ||
version_compare($pun_config['o_cur_version'], FORUM_VERSION, '<'))
{
header('Location: db_update.php');
exit;
}*/
// Enable output buffering
if (!defined('PUN_DISABLE_BUFFERING'))
{
// Should we use gzip output compression?
if ($pun_config['o_gzip'] && extension_loaded('zlib'))
ob_start('ob_gzhandler');
else
ob_start();
}
// Define standard date/time formats
$forum_time_formats = array($pun_config['o_time_format'], 'H:i:s', 'H:i', 'g:i:s a', 'g:i a');
$forum_date_formats = array($pun_config['o_date_format'], 'Y-m-d', 'Y-d-m', 'd-m-Y', 'm-d-Y', 'M j Y', 'jS M Y');
// Check/update/set cookie and fetch user info
$pun_user = array();
check_cookie($pun_user);
// Load the language system
require PUN_ROOT.'include/classes/lang.php';
$lang = new Flux_Lang();
$lang->setDefaultLanguage('English');
$lang->setLanguage($pun_user['language']);
// Load the common language file
$lang->load('common');
// Check if we are to display a maintenance message
if ($pun_config['o_maintenance'] && $pun_user['g_id'] > PUN_ADMIN && !defined('PUN_TURN_OFF_MAINT'))
maintenance_message();
// Load cached bans
$pun_bans = $cache->get('bans');
if ($pun_bans === \fluxbb\cache\Cache::NOT_FOUND)
{
// Get the ban list from the DB
$query = $db->select(array('id' => 'b.id', 'username' => 'b.username', 'ip' => 'b.ip', 'email' => 'b.email', 'message' => 'b.message', 'expire' => 'b.expire', 'ban_creator' => 'b.ban_creator'), 'bans AS b');
$params = array();
$pun_bans = $query->run($params);
unset ($query, $params);
$cache->set('bans', $pun_bans);
}
// Check if current user is banned
check_bans();
// Update online list
update_users_online();
// Check to see if we logged in without a cookie being set
if ($pun_user['is_guest'] && isset($_GET['login']))
message($lang->t('No cookie'));
// The maximum size of a post, in bytes, since the field is now MEDIUMTEXT this allows ~16MB but lets cap at 1MB...
if (!defined('PUN_MAX_POSTSIZE'))
define('PUN_MAX_POSTSIZE', 1048576);
if (!defined('PUN_SEARCH_MIN_WORD'))
define('PUN_SEARCH_MIN_WORD', 3);
if (!defined('PUN_SEARCH_MAX_WORD'))
define('PUN_SEARCH_MAX_WORD', 20);
if (!defined('FORUM_MAX_COOKIE_SIZE'))
define('FORUM_MAX_COOKIE_SIZE', 4048);