From 705d706a7f229857b0627c320b7cfe7f8432b51c Mon Sep 17 00:00:00 2001
From: Meik Sievertsen <acydburn@phpbb.com>
Date: Fri, 26 Dec 2008 16:29:21 +0000
Subject: Add core bootstrap. Also change common.php to use it.

git-svn-id: file:///svn/phpbb/trunk@9231 89ea8834-ac86-4346-8a33-228a782c2dd0
---
 phpBB/common.php                  | 189 ++++++++------------------------------
 phpBB/includes/core/bootstrap.php | 130 ++++++++++++++++++++++++++
 2 files changed, 166 insertions(+), 153 deletions(-)
 create mode 100644 phpBB/includes/core/bootstrap.php

(limited to 'phpBB')

diff --git a/phpBB/common.php b/phpBB/common.php
index 2123158861..c954df414d 100644
--- a/phpBB/common.php
+++ b/phpBB/common.php
@@ -7,6 +7,8 @@
 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 *
 * Minimum Requirement: PHP 5.2.0+
+*
+* Within this file the framework with all components as well as all phpBB-specific things will be loaded
 */
 
 /**
@@ -16,118 +18,11 @@ if (!defined('IN_PHPBB'))
 	exit;
 }
 
-$starttime = explode(' ', microtime());
-$starttime = $starttime[1] + $starttime[0];
-
-// Report all errors, except notices
-error_reporting(E_ALL ^ E_NOTICE);
-date_default_timezone_set('UTC');
-
-/*
-* Remove variables created by register_globals from the global scope
-* Thanks to Matt Kavanagh
-*/
-function deregister_globals()
-{
-	$not_unset = array(
-		'GLOBALS'	=> true,
-		'_GET'		=> true,
-		'_POST'		=> true,
-		'_COOKIE'	=> true,
-		'_REQUEST'	=> true,
-		'_SERVER'	=> true,
-		'_SESSION'	=> true,
-		'_ENV'		=> true,
-		'_FILES'	=> true,
-		'phpEx'		=> true,
-		'phpbb_root_path'	=> true
-	);
-
-	// Not only will array_merge and array_keys give a warning if
-	// a parameter is not an array, array_merge will actually fail.
-	// So we check if _SESSION has been initialised.
-	if (!isset($_SESSION) || !is_array($_SESSION))
-	{
-		$_SESSION = array();
-	}
-
-	// Merge all into one extremely huge array; unset this later
-	$input = array_merge(
-		array_keys($_GET),
-		array_keys($_POST),
-		array_keys($_COOKIE),
-		array_keys($_SERVER),
-		array_keys($_SESSION),
-		array_keys($_ENV),
-		array_keys($_FILES)
-	);
-
-	foreach ($input as $varname)
-	{
-		if (isset($not_unset[$varname]))
-		{
-			// Hacking attempt. No point in continuing unless it's a COOKIE
-			if ($varname !== 'GLOBALS' || isset($_GET['GLOBALS']) || isset($_POST['GLOBALS']) || isset($_SERVER['GLOBALS']) || isset($_SESSION['GLOBALS']) || isset($_ENV['GLOBALS']) || isset($_FILES['GLOBALS']))
-			{
-				exit;
-			}
-			else
-			{
-				$cookie = &$_COOKIE;
-				while (isset($cookie['GLOBALS']))
-				{
-					foreach ($cookie['GLOBALS'] as $registered_var => $value)
-					{
-						if (!isset($not_unset[$registered_var]))
-						{
-							unset($GLOBALS[$registered_var]);
-						}
-					}
-					$cookie = &$cookie['GLOBALS'];
-				}
-			}
-		}
-
-		unset($GLOBALS[$varname]);
-	}
-
-	unset($input);
-}
-
-// If we are on PHP >= 6.0.0 we do not need some code
-if (version_compare(PHP_VERSION, '6.0.0-dev', '>='))
-{
-	/**
-	* @ignore
-	*/
-	define('STRIP', false);
-}
-else
-{
-	@set_magic_quotes_runtime(0);
-
-	// Be paranoid with passed vars
-	if (@ini_get('register_globals') == '1' || strtolower(@ini_get('register_globals')) == 'on' || !function_exists('ini_get'))
-	{
-		deregister_globals();
-	}
-
-	define('STRIP', (get_magic_quotes_gpc()) ? true : false);
-}
-
-if (defined('IN_CRON'))
-{
-	@define('PHPBB_ROOT_PATH', dirname(__FILE__) . DIRECTORY_SEPARATOR);
-}
-
-if (!file_exists(PHPBB_ROOT_PATH . 'config.' . PHP_EXT))
-{
-	die('<p>The config.' . PHP_EXT . ' file could not be found.</p><p><a href="' . PHPBB_ROOT_PATH . 'install/index.' . PHP_EXT . '">Click here to install phpBB</a></p>');
-}
-
-require(PHPBB_ROOT_PATH . 'config.' . PHP_EXT);
+// Init Framework
+require PHPBB_ROOT_PATH . 'includes/core/bootstrap.' . PHP_EXT;
 
-if (!defined('PHPBB_INSTALLED'))
+// Run through remaining Framework states
+if (defined('PHPBB_CONFIG_MISSING') || !defined('PHPBB_INSTALLED'))
 {
 	// Redirect the user to the installer
 	// We have to generate a full HTTP/1.1 header here since we can't guarantee to have any of the information
@@ -163,60 +58,48 @@ if (!defined('PHPBB_INSTALLED'))
 	exit;
 }
 
-if (defined('DEBUG_EXTRA'))
+// Set PHP error handler to ours
+set_error_handler(defined('PHPBB_MSG_HANDLER') ? PHPBB_MSG_HANDLER : 'msg_handler');
+
+// enforce the use of the request class
+phpbb_request::disable_super_globals();
+
+// @todo Syndicate config variables somehow and check them here. It would be also nice to not have so many global vars from the config file (means: re-think layout of config file, maybe require phpbb:: to be set)
+
+if (!empty($dbms))
 {
-	$base_memory_usage = 0;
-	if (function_exists('memory_get_usage'))
-	{
-		$base_memory_usage = memory_get_usage();
-	}
+	// Register DB object.
+	phpbb::assign('db', phpbb_db_dbal::connect($dbms, $dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false, defined('PHPBB_DB_NEW_LINK') ? PHPBB_DB_NEW_LINK : false));
 }
 
-// Load Extensions
-if (!empty($load_extensions))
+// We do not need the db password any longer, unset for safety purposes
+if (!empty($dbpasswd))
 {
-	$load_extensions = explode(',', $load_extensions);
-
-	foreach ($load_extensions as $extension)
-	{
-		@dl(trim($extension));
-	}
+	unset($dbpasswd);
 }
 
-// Include files
-require(PHPBB_ROOT_PATH . 'includes/acm/acm_' . $acm_type . '.' . PHP_EXT);
-require(PHPBB_ROOT_PATH . 'includes/cache.' . PHP_EXT);
-require(PHPBB_ROOT_PATH . 'includes/template.' . PHP_EXT);
-require(PHPBB_ROOT_PATH . 'includes/session.' . PHP_EXT);
-require(PHPBB_ROOT_PATH . 'includes/auth.' . PHP_EXT);
-
-require(PHPBB_ROOT_PATH . 'includes/functions.' . PHP_EXT);
-require(PHPBB_ROOT_PATH . 'includes/functions_content.' . PHP_EXT);
+// Register Cache Manager
+phpbb::register('acm');
 
-require(PHPBB_ROOT_PATH . 'includes/constants.' . PHP_EXT);
-require(PHPBB_ROOT_PATH . 'includes/db/' . $dbms . '.' . PHP_EXT);
-require(PHPBB_ROOT_PATH . 'includes/utf/utf_tools.' . PHP_EXT);
+// Grab global variables
+phpbb_cache::obtain_config();
 
-// Set PHP error handler to ours
-set_error_handler(defined('PHPBB_MSG_HANDLER') ? PHPBB_MSG_HANDLER : 'msg_handler');
+// Register Template
+phpbb::register('template');
 
-// enforce the use of the request class
-phpbb_request::disable_super_globals();
+// Register permission class
+phpbb::register('acl');
 
-// Instantiate some basic classes
-$user		= new user();
-$auth		= new auth();
-$template	= new template();
-$cache		= new acm();
-$db			= new $sql_db();
+// Register user object
+phpbb::register('user', false, false, phpbb::$config['auth_method']);
 
-// Connect to DB
-$db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false, defined('PHPBB_DB_NEW_LINK') ? PHPBB_DB_NEW_LINK : false);
+// Register API
+phpbb::register('api');
 
-// We do not need this any longer, unset for safety purposes
-unset($dbpasswd);
+// Register Plugins
+phpbb::$plugins->init(PHPBB_ROOT_PATH . 'plugins/');
 
-// Grab global variables, re-cache if necessary
-$config = phpbb_cache::obtain_config();
+// Setup Plugins
+phpbb::$plugins->setup();
 
 ?>
\ No newline at end of file
diff --git a/phpBB/includes/core/bootstrap.php b/phpBB/includes/core/bootstrap.php
new file mode 100644
index 0000000000..4d604dadcc
--- /dev/null
+++ b/phpBB/includes/core/bootstrap.php
@@ -0,0 +1,130 @@
+<?php
+/**
+*
+* @package core
+* @version $Id: bootstrap.php 9216 2008-12-23 18:40:33Z acydburn $
+* @copyright (c) 2008 phpBB Group
+* @license http://opensource.org/licenses/gpl-license.php GNU Public License
+*
+* Within this file only the framework with all components but no phpBB-specific things will be loaded
+*/
+
+/**
+*/
+if (!defined('IN_PHPBB'))
+{
+	exit;
+}
+
+$starttime = explode(' ', microtime());
+$starttime = $starttime[1] + $starttime[0];
+
+// Report all errors, except notices
+error_reporting(E_ALL | E_STRICT); // ^ E_NOTICE
+date_default_timezone_set('UTC');
+
+// Initialize some standard variables, constants and classes we need
+require_once PHPBB_ROOT_PATH . 'includes/core/core.' . PHP_EXT;
+require_once PHPBB_ROOT_PATH . 'plugins/bootstrap.' . PHP_EXT;
+
+// Define STRIP if it is not already defined
+if (!defined('STRIP'))
+{
+	// If we are on PHP >= 6.0.0 we do not need some code
+	if (version_compare(PHP_VERSION, '6.0.0-dev', '>='))
+	{
+		/**
+		* @ignore
+		*/
+		define('STRIP', false);
+	}
+	else
+	{
+		@set_magic_quotes_runtime(0);
+
+		// We do not allow register globals set
+		if (@ini_get('register_globals') == '1' || strtolower(@ini_get('register_globals')) == 'on' || !function_exists('ini_get'))
+		{
+			die('phpBB will not work with register globals turned on. Please turn register globals off.');
+		}
+
+		define('STRIP', (@get_magic_quotes_gpc()) ? true : false);
+	}
+}
+
+// we check for the cron script and change the root path
+if (defined('IN_CRON'))
+{
+	@define('PHPBB_ROOT_PATH', dirname(__FILE__) . DIRECTORY_SEPARATOR);
+}
+
+// Set some default configuration parameter if the config file does not exist
+if (!file_exists(PHPBB_ROOT_PATH . 'config.' . PHP_EXT))
+{
+	define('CONFIG_ADM_FOLDER', 'adm');
+	define('CONFIG_ACM_TYPE', 'file');
+
+	// This allows common.php or an installation script to do specific actions if the configuration is missing
+	define('PHPBB_CONFIG_MISSING', true);
+}
+else
+{
+	require PHPBB_ROOT_PATH . 'config.' . PHP_EXT;
+}
+
+// Set default configuration variables if phpBB is not installed
+if (!defined('PHPBB_INSTALLED'))
+{
+	$dbms = $dbhost = $dbport = $dbname = $dbuser = $dbpasswd = '';
+	$table_prefix = 'phpbb_';
+}
+
+if (defined('DEBUG_EXTRA'))
+{
+	$base_memory_usage = 0;
+	if (function_exists('memory_get_usage'))
+	{
+		$base_memory_usage = memory_get_usage();
+	}
+}
+
+// Load Extensions
+if (!empty($load_extensions))
+{
+	$load_extensions = explode(',', $load_extensions);
+
+	foreach ($load_extensions as $extension)
+	{
+		@dl(trim($extension));
+	}
+}
+
+// Register autoload function
+spl_autoload_register('__phpbb_autoload');
+
+// Set error handler before a real one is there
+set_error_handler(array('phpbb', 'error_handler'));
+
+// Add constants
+include_once PHPBB_ROOT_PATH . 'includes/constants.' . PHP_EXT;
+
+// Add global functions
+// @todo remove functions_content, trim down functions.php
+require_once PHPBB_ROOT_PATH . 'includes/functions.' . PHP_EXT;
+require_once PHPBB_ROOT_PATH . 'includes/functions_content.' . PHP_EXT;
+
+// Add UTF8 tools
+require_once PHPBB_ROOT_PATH . 'includes/utf/utf_tools.' . PHP_EXT;
+
+// Add pre-defined system core files
+require_once PHPBB_ROOT_PATH . 'includes/core/request.' . PHP_EXT;
+
+phpbb::register('security', false, 'core/security');
+phpbb::register('url', false, 'core/url');
+phpbb::register('system', false, 'core/system');
+phpbb::register('server-vars', 'phpbb_system_info', 'core/system_info');
+
+// Make plugins structure available
+phpbb::register('plugins');
+
+?>
\ No newline at end of file
-- 
cgit v1.2.1