elkarte /
Elkarte
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
| 1 | <?php |
||
| 2 | |||
| 3 | /** |
||
| 4 | * This, as you have probably guessed, is the crux for all functions. |
||
| 5 | * Everything should start here, so all the setup and security is done |
||
| 6 | * properly. |
||
| 7 | * |
||
| 8 | * @name ElkArte Forum |
||
| 9 | * @copyright ElkArte Forum contributors |
||
| 10 | * @license BSD http://opensource.org/licenses/BSD-3-Clause |
||
| 11 | * |
||
| 12 | * This software is a derived product, based on: |
||
| 13 | * |
||
| 14 | * Simple Machines Forum (SMF) |
||
| 15 | * copyright: 2011 Simple Machines (http://www.simplemachines.org) |
||
| 16 | * license: BSD, See included LICENSE.TXT for terms and conditions. |
||
| 17 | * |
||
| 18 | * @version 1.0.7 |
||
| 19 | * |
||
| 20 | */ |
||
| 21 | |||
| 22 | $forum_version = 'ElkArte 1.0.7'; |
||
| 23 | define('FORUM_VERSION', $forum_version); |
||
| 24 | |||
| 25 | // First things first, but not necessarily in that order. |
||
| 26 | define('ELK', 1); |
||
| 27 | |||
| 28 | // Shortcut for the browser cache stale |
||
| 29 | define('CACHE_STALE', '?107'); |
||
| 30 | |||
| 31 | if (function_exists('set_magic_quotes_runtime')) |
||
| 32 | @set_magic_quotes_runtime(0); |
||
|
0 ignored issues
–
show
|
|||
| 33 | error_reporting(E_ALL | E_STRICT); |
||
| 34 | $time_start = microtime(true); |
||
| 35 | |||
| 36 | // Turn on output buffering. |
||
| 37 | ob_start(); |
||
| 38 | |||
| 39 | // We don't need no globals. |
||
| 40 | foreach (array('db_character_set', 'cachedir') as $variable) |
||
| 41 | if (isset($GLOBALS[$variable])) |
||
| 42 | unset($GLOBALS[$variable], $GLOBALS[$variable]); |
||
| 43 | |||
| 44 | // Ready to load the site settings. |
||
| 45 | require_once(dirname(__FILE__) . '/Settings.php'); |
||
| 46 | |||
| 47 | // Directional only script time usage for display |
||
| 48 | if (!empty($db_show_debug) && function_exists('getrusage')) |
||
| 49 | $rusage_start = getrusage(); |
||
| 50 | |||
| 51 | // Make sure the paths are correct... at least try to fix them. |
||
| 52 | if (!file_exists($boarddir) && file_exists(dirname(__FILE__) . '/agreement.txt')) |
||
| 53 | $boarddir = dirname(__FILE__); |
||
| 54 | if (!file_exists($sourcedir . '/SiteDispatcher.class.php') && file_exists($boarddir . '/sources')) |
||
| 55 | $sourcedir = $boarddir . '/sources'; |
||
| 56 | |||
| 57 | // Check that directories which didn't exist in past releases are initialized. |
||
| 58 | if ((empty($cachedir) || !file_exists($cachedir)) && file_exists($boarddir . '/cache')) |
||
| 59 | $cachedir = $boarddir . '/cache'; |
||
| 60 | if ((empty($extdir) || !file_exists($extdir)) && file_exists($sourcedir . '/ext')) |
||
| 61 | $extdir = $sourcedir . '/ext'; |
||
| 62 | if ((empty($languagedir) || !file_exists($languagedir)) && file_exists($boarddir . '/themes/default/languages')) |
||
| 63 | $languagedir = $boarddir . '/themes/default/languages'; |
||
| 64 | |||
| 65 | // Time to forget about variables and go with constants! |
||
| 66 | DEFINE('BOARDDIR', $boarddir); |
||
|
0 ignored issues
–
show
|
|||
| 67 | DEFINE('CACHEDIR', $cachedir); |
||
|
0 ignored issues
–
show
|
|||
| 68 | DEFINE('EXTDIR', $extdir); |
||
|
0 ignored issues
–
show
|
|||
| 69 | DEFINE('LANGUAGEDIR', $languagedir); |
||
|
0 ignored issues
–
show
|
|||
| 70 | DEFINE('SOURCEDIR', $sourcedir); |
||
|
0 ignored issues
–
show
|
|||
| 71 | DEFINE('ADMINDIR', $sourcedir . '/admin'); |
||
|
0 ignored issues
–
show
|
|||
| 72 | DEFINE('CONTROLLERDIR', $sourcedir . '/controllers'); |
||
|
0 ignored issues
–
show
|
|||
| 73 | DEFINE('SUBSDIR', $sourcedir . '/subs'); |
||
|
0 ignored issues
–
show
|
|||
| 74 | unset($boarddir, $cachedir, $sourcedir, $languagedir, $extdir); |
||
| 75 | |||
| 76 | // Files we cannot live without. |
||
| 77 | require_once(SOURCEDIR . '/QueryString.php'); |
||
| 78 | require_once(SOURCEDIR . '/Session.php'); |
||
| 79 | require_once(SOURCEDIR . '/Subs.php'); |
||
| 80 | require_once(SOURCEDIR . '/Errors.php'); |
||
| 81 | require_once(SOURCEDIR . '/Logging.php'); |
||
| 82 | require_once(SOURCEDIR . '/Load.php'); |
||
| 83 | require_once(SUBSDIR . '/Cache.subs.php'); |
||
| 84 | require_once(SOURCEDIR . '/Security.php'); |
||
| 85 | require_once(SOURCEDIR . '/BrowserDetector.class.php'); |
||
| 86 | require_once(SOURCEDIR . '/ErrorContext.class.php'); |
||
| 87 | require_once(SUBSDIR . '/Util.class.php'); |
||
| 88 | require_once(SUBSDIR . '/TemplateLayers.class.php'); |
||
| 89 | require_once(SOURCEDIR . '/Action.controller.php'); |
||
| 90 | |||
| 91 | // Forum in extended maintenance mode? Our trip ends here with a bland message. |
||
| 92 | if (!empty($maintenance) && $maintenance == 2) |
||
| 93 | display_maintenance_message(); |
||
| 94 | |||
| 95 | // Clean the request. |
||
| 96 | cleanRequest(); |
||
| 97 | |||
| 98 | // Initiate the database connection and define some database functions to use. |
||
| 99 | loadDatabase(); |
||
| 100 | |||
| 101 | // It's time for settings loaded from the database. |
||
| 102 | reloadSettings(); |
||
| 103 | |||
| 104 | // Our good ole' contextual array, which will hold everything |
||
| 105 | $context = array(); |
||
| 106 | |||
| 107 | // Seed the random generator. |
||
| 108 | elk_seed_generator(); |
||
| 109 | |||
| 110 | // Before we get carried away, are we doing a scheduled task? If so save CPU cycles by jumping out! |
||
| 111 | if (isset($_GET['scheduled'])) |
||
| 112 | { |
||
| 113 | require_once(CONTROLLERDIR . '/ScheduledTasks.controller.php'); |
||
| 114 | $controller = new ScheduledTasks_Controller(); |
||
| 115 | $controller->action_autotask(); |
||
| 116 | } |
||
| 117 | |||
| 118 | // Check if compressed output is enabled, supported, and not already being done. |
||
| 119 | if (!empty($modSettings['enableCompressedOutput']) && !headers_sent()) |
||
| 120 | { |
||
| 121 | // If zlib is being used, turn off output compression. |
||
| 122 | if (ini_get('zlib.output_compression') >= 1 || ini_get('output_handler') == 'ob_gzhandler') |
||
| 123 | $modSettings['enableCompressedOutput'] = 0; |
||
| 124 | else |
||
| 125 | { |
||
| 126 | @ob_end_clean(); |
||
|
0 ignored issues
–
show
It seems like you do not handle an error condition here. This can introduce security issues, and is generally not recommended.
If you suppress an error, we recommend checking for the error condition explicitly: // For example instead of
@mkdir($dir);
// Better use
if (@mkdir($dir) === false) {
throw new \RuntimeException('The directory '.$dir.' could not be created.');
}
Loading history...
|
|||
| 127 | ob_start('ob_gzhandler'); |
||
| 128 | } |
||
| 129 | } |
||
| 130 | |||
| 131 | // Register an error handler. |
||
| 132 | set_error_handler('error_handler'); |
||
| 133 | |||
| 134 | // Start the session. (assuming it hasn't already been.) |
||
| 135 | loadSession(); |
||
| 136 | |||
| 137 | // Restore post data if we are revalidating OpenID. |
||
| 138 | if (isset($_GET['openid_restore_post']) && !empty($_SESSION['openid']['saved_data'][$_GET['openid_restore_post']]['post']) && empty($_POST)) |
||
| 139 | { |
||
| 140 | $_POST = $_SESSION['openid']['saved_data'][$_GET['openid_restore_post']]['post']; |
||
| 141 | unset($_SESSION['openid']['saved_data'][$_GET['openid_restore_post']]); |
||
| 142 | } |
||
| 143 | |||
| 144 | // Pre-dispatch |
||
| 145 | elk_main(); |
||
| 146 | |||
| 147 | // Call obExit specially; we're coming from the main area ;). |
||
| 148 | obExit(null, null, true); |
||
| 149 | |||
| 150 | /** |
||
| 151 | * The main dispatcher. |
||
| 152 | * This delegates to each area. |
||
| 153 | */ |
||
| 154 | function elk_main() |
||
| 155 | { |
||
| 156 | global $modSettings, $user_info, $topic, $board_info, $context; |
||
| 157 | |||
| 158 | // Special case: session keep-alive, output a transparent pixel. |
||
| 159 | if (isset($_GET['action']) && $_GET['action'] == 'keepalive') |
||
| 160 | { |
||
| 161 | header('Content-Type: image/gif'); |
||
| 162 | die("\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x21\xF9\x04\x01\x00\x00\x00\x00\x2C\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02\x44\x01\x00\x3B"); |
||
|
0 ignored issues
–
show
The function elk_main() contains an exit expression.
An exit expression should only be used in rare cases. For example, if you write a short command line script. In most cases however, using an Loading history...
|
|||
| 163 | } |
||
| 164 | |||
| 165 | // We should set our security headers now. |
||
| 166 | frameOptionsHeader(); |
||
| 167 | securityOptionsHeader(); |
||
| 168 | |||
| 169 | // Load the user's cookie (or set as guest) and load their settings. |
||
| 170 | loadUserSettings(); |
||
| 171 | |||
| 172 | // Load the current board's information. |
||
| 173 | loadBoard(); |
||
| 174 | |||
| 175 | // Load the current user's permissions. |
||
| 176 | loadPermissions(); |
||
| 177 | |||
| 178 | // Load BadBehavior before we go much further |
||
| 179 | loadBadBehavior(); |
||
| 180 | |||
| 181 | // Attachments don't require the entire theme to be loaded. |
||
| 182 | if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'dlattach' && (!empty($modSettings['allow_guestAccess']) && $user_info['is_guest'])) |
||
| 183 | detectBrowser(); |
||
| 184 | // Load the current theme. (note that ?theme=1 will also work, may be used for guest theming.) |
||
| 185 | else |
||
| 186 | loadTheme(); |
||
| 187 | |||
| 188 | // Check if the user should be disallowed access. |
||
| 189 | is_not_banned(); |
||
| 190 | |||
| 191 | // If we are in a topic and don't have permission to approve it then duck out now. |
||
| 192 | if (!empty($topic) && empty($board_info['cur_topic_approved']) && !allowedTo('approve_posts') && ($user_info['id'] != $board_info['cur_topic_starter'] || $user_info['is_guest'])) |
||
| 193 | fatal_lang_error('not_a_topic', false); |
||
| 194 | |||
| 195 | $no_stat_actions = array('dlattach', 'findmember', 'jsoption', 'requestmembers', 'jslocale', 'xmlpreview', 'suggest', '.xml', 'xmlhttp', 'verificationcode', 'viewquery', 'viewadminfile'); |
||
| 196 | call_integration_hook('integrate_pre_log_stats', array(&$no_stat_actions)); |
||
| 197 | |||
| 198 | // Do some logging, unless this is an attachment, avatar, toggle of editor buttons, theme option, XML feed etc. |
||
| 199 | if (empty($_REQUEST['action']) || !in_array($_REQUEST['action'], $no_stat_actions)) |
||
| 200 | { |
||
| 201 | // I see you! |
||
| 202 | writeLog(); |
||
| 203 | |||
| 204 | // Track forum statistics and hits...? |
||
| 205 | if (!empty($modSettings['hitStats'])) |
||
| 206 | trackStats(array('hits' => '+')); |
||
| 207 | } |
||
| 208 | unset($no_stat_actions); |
||
| 209 | |||
| 210 | // What shall we do? |
||
| 211 | require_once(SOURCEDIR . '/SiteDispatcher.class.php'); |
||
| 212 | $dispatcher = new Site_Dispatcher(); |
||
| 213 | |||
| 214 | // Show where we came from, and go |
||
| 215 | $context['site_action'] = $dispatcher->site_action(); |
||
| 216 | $context['site_action'] = !empty($context['site_action']) ? $context['site_action'] : (isset($_REQUEST['action']) ? $_REQUEST['action'] : ''); |
||
| 217 | $dispatcher->dispatch(); |
||
| 218 | } |
If you suppress an error, we recommend checking for the error condition explicitly: