322 行
		
	
	
	
		
			7.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			322 行
		
	
	
	
		
			7.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
|  | <?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed'); | ||
|  | /** | ||
|  |  * CodeIgniter | ||
|  |  * | ||
|  |  * An open source application development framework for PHP 5.1.6 or newer | ||
|  |  * | ||
|  |  * @package		CodeIgniter | ||
|  |  * @author		ExpressionEngine Dev Team | ||
|  |  * @copyright	Copyright (c) 2008 - 2011, EllisLab, Inc. | ||
|  |  * @license		http://codeigniter.com/user_guide/license.html | ||
|  |  * @link		http://codeigniter.com | ||
|  |  * @since		Version 1.0 | ||
|  |  * @filesource | ||
|  |  */ | ||
|  | 
 | ||
|  | // ------------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | /** | ||
|  |  * CodeIgniter Config Class | ||
|  |  * | ||
|  |  * This class contains functions that enable config files to be managed | ||
|  |  * | ||
|  |  * @package		CodeIgniter | ||
|  |  * @subpackage	Libraries | ||
|  |  * @category	Libraries | ||
|  |  * @author		ExpressionEngine Dev Team | ||
|  |  * @link		http://codeigniter.com/user_guide/libraries/config.html | ||
|  |  */ | ||
|  | class CI_Config { | ||
|  | 
 | ||
|  | 	var $config = array(); | ||
|  | 	var $is_loaded = array(); | ||
|  | 	var $_config_paths = array(APPPATH); | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Constructor | ||
|  | 	 * | ||
|  | 	 * Sets the $config data from the primary config.php file as a class variable | ||
|  | 	 * | ||
|  | 	 * @access   public | ||
|  | 	 * @param   string	the config file name | ||
|  | 	 * @param   boolean  if configuration values should be loaded into their own section | ||
|  | 	 * @param   boolean  true if errors should just return false, false if an error message should be displayed | ||
|  | 	 * @return  boolean  if the file was successfully loaded or not | ||
|  | 	 */ | ||
|  | 	function __construct() | ||
|  | 	{ | ||
|  | 		$this->config =& get_config(); | ||
|  | 		log_message('debug', "Config Class Initialized"); | ||
|  | 
 | ||
|  | 		// Set the base_url automatically if none was provided
 | ||
|  | 		if ($this->config['base_url'] == '') | ||
|  | 		{ | ||
|  | 			if (isset($_SERVER['HTTP_HOST'])) | ||
|  | 			{ | ||
|  | 				$base_url = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off' ? 'https' : 'http'; | ||
|  | 				$base_url .= '://'. $_SERVER['HTTP_HOST']; | ||
|  | 				$base_url .= str_replace(basename($_SERVER['SCRIPT_NAME']), '', $_SERVER['SCRIPT_NAME']); | ||
|  | 			} | ||
|  | 
 | ||
|  | 			else | ||
|  | 			{ | ||
|  | 				$base_url = 'http://localhost/'; | ||
|  | 			} | ||
|  | 
 | ||
|  | 			$this->set_item('base_url', $base_url); | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// --------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Load Config File | ||
|  | 	 * | ||
|  | 	 * @access	public | ||
|  | 	 * @param	string	the config file name | ||
|  | 	 * @param   boolean  if configuration values should be loaded into their own section | ||
|  | 	 * @param   boolean  true if errors should just return false, false if an error message should be displayed | ||
|  | 	 * @return	boolean	if the file was loaded correctly | ||
|  | 	 */ | ||
|  | 	function load($file = '', $use_sections = FALSE, $fail_gracefully = FALSE) | ||
|  | 	{ | ||
|  | 		$file = ($file == '') ? 'config' : str_replace(EXT, '', $file); | ||
|  | 		$loaded = FALSE; | ||
|  | 
 | ||
|  | 		foreach ($this->_config_paths as $path) | ||
|  | 		{			 | ||
|  | 			$file_path = $path.'config/'.ENVIRONMENT.'/'.$file.EXT; | ||
|  | 
 | ||
|  | 			if (in_array($file_path, $this->is_loaded, TRUE)) | ||
|  | 			{ | ||
|  | 				$loaded = TRUE; | ||
|  | 				continue; | ||
|  | 			} | ||
|  | 
 | ||
|  | 			if ( ! file_exists($file_path)) | ||
|  | 			{ | ||
|  | 				log_message('debug', 'Config for '.ENVIRONMENT.' environment is not found. Trying global config.'); | ||
|  | 				$file_path = $path.'config/'.$file.EXT; | ||
|  | 				 | ||
|  | 				if ( ! file_exists($file_path)) | ||
|  | 				{ | ||
|  | 					continue; | ||
|  | 				} | ||
|  | 			} | ||
|  | 			 | ||
|  | 			include($file_path); | ||
|  | 
 | ||
|  | 			if ( ! isset($config) OR ! is_array($config)) | ||
|  | 			{ | ||
|  | 				if ($fail_gracefully === TRUE) | ||
|  | 				{ | ||
|  | 					return FALSE; | ||
|  | 				} | ||
|  | 				show_error('Your '.$file_path.' file does not appear to contain a valid configuration array.'); | ||
|  | 			} | ||
|  | 
 | ||
|  | 			if ($use_sections === TRUE) | ||
|  | 			{ | ||
|  | 				if (isset($this->config[$file])) | ||
|  | 				{ | ||
|  | 					$this->config[$file] = array_merge($this->config[$file], $config); | ||
|  | 				} | ||
|  | 				else | ||
|  | 				{ | ||
|  | 					$this->config[$file] = $config; | ||
|  | 				} | ||
|  | 			} | ||
|  | 			else | ||
|  | 			{ | ||
|  | 				$this->config = array_merge($this->config, $config); | ||
|  | 			} | ||
|  | 
 | ||
|  | 			$this->is_loaded[] = $file_path; | ||
|  | 			unset($config); | ||
|  | 
 | ||
|  | 			$loaded = TRUE; | ||
|  | 			log_message('debug', 'Config file loaded: '.$file_path); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if ($loaded === FALSE) | ||
|  | 		{ | ||
|  | 			if ($fail_gracefully === TRUE) | ||
|  | 			{ | ||
|  | 				return FALSE; | ||
|  | 			} | ||
|  | 			show_error('The configuration file '.ENVIRONMENT.'/'.$file.EXT.' and '.$file.EXT.' do not exist.'); | ||
|  | 		} | ||
|  | 		 | ||
|  | 		return TRUE; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// --------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Fetch a config file item | ||
|  | 	 * | ||
|  | 	 * | ||
|  | 	 * @access	public | ||
|  | 	 * @param	string	the config item name | ||
|  | 	 * @param	string	the index name | ||
|  | 	 * @param	bool | ||
|  | 	 * @return	string | ||
|  | 	 */ | ||
|  | 	function item($item, $index = '') | ||
|  | 	{ | ||
|  | 		if ($index == '') | ||
|  | 		{ | ||
|  | 			if ( ! isset($this->config[$item])) | ||
|  | 			{ | ||
|  | 				return FALSE; | ||
|  | 			} | ||
|  | 
 | ||
|  | 			$pref = $this->config[$item]; | ||
|  | 		} | ||
|  | 		else | ||
|  | 		{ | ||
|  | 			if ( ! isset($this->config[$index])) | ||
|  | 			{ | ||
|  | 				return FALSE; | ||
|  | 			} | ||
|  | 
 | ||
|  | 			if ( ! isset($this->config[$index][$item])) | ||
|  | 			{ | ||
|  | 				return FALSE; | ||
|  | 			} | ||
|  | 
 | ||
|  | 			$pref = $this->config[$index][$item]; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return $pref; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// --------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Fetch a config file item - adds slash after item | ||
|  | 	 * | ||
|  | 	 * The second parameter allows a slash to be added to the end of | ||
|  | 	 * the item, in the case of a path. | ||
|  | 	 * | ||
|  | 	 * @access	public | ||
|  | 	 * @param	string	the config item name | ||
|  | 	 * @param	bool | ||
|  | 	 * @return	string | ||
|  | 	 */ | ||
|  | 	function slash_item($item) | ||
|  | 	{ | ||
|  | 		if ( ! isset($this->config[$item])) | ||
|  | 		{ | ||
|  | 			return FALSE; | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return rtrim($this->config[$item], '/').'/'; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// --------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Site URL | ||
|  | 	 * | ||
|  | 	 * @access	public | ||
|  | 	 * @param	string	the URI string | ||
|  | 	 * @return	string | ||
|  | 	 */ | ||
|  | 	function site_url($uri = '') | ||
|  | 	{ | ||
|  | 		if ($uri == '') | ||
|  | 		{ | ||
|  | 			return $this->slash_item('base_url').$this->item('index_page'); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		if ($this->item('enable_query_strings') == FALSE) | ||
|  | 		{ | ||
|  | 			if (is_array($uri)) | ||
|  | 			{ | ||
|  | 				$uri = implode('/', $uri); | ||
|  | 			} | ||
|  | 
 | ||
|  | 			$index = $this->item('index_page') == '' ? '' : $this->slash_item('index_page'); | ||
|  | 			$suffix = ($this->item('url_suffix') == FALSE) ? '' : $this->item('url_suffix'); | ||
|  | 			return $this->slash_item('base_url').$index.trim($uri, '/').$suffix; | ||
|  | 		} | ||
|  | 		else | ||
|  | 		{ | ||
|  | 			if (is_array($uri)) | ||
|  | 			{ | ||
|  | 				$i = 0; | ||
|  | 				$str = ''; | ||
|  | 				foreach ($uri as $key => $val) | ||
|  | 				{ | ||
|  | 					$prefix = ($i == 0) ? '' : '&'; | ||
|  | 					$str .= $prefix.$key.'='.$val; | ||
|  | 					$i++; | ||
|  | 				} | ||
|  | 
 | ||
|  | 				$uri = $str; | ||
|  | 			} | ||
|  | 
 | ||
|  | 			return $this->slash_item('base_url').$this->item('index_page').'?'.$uri; | ||
|  | 		} | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// --------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * System URL | ||
|  | 	 * | ||
|  | 	 * @access	public | ||
|  | 	 * @return	string | ||
|  | 	 */ | ||
|  | 	function system_url() | ||
|  | 	{ | ||
|  | 		$x = explode("/", preg_replace("|/*(.+?)/*$|", "\\1", BASEPATH)); | ||
|  | 		return $this->slash_item('base_url').end($x).'/'; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// --------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Set a config file item | ||
|  | 	 * | ||
|  | 	 * @access	public | ||
|  | 	 * @param	string	the config item key | ||
|  | 	 * @param	string	the config item value | ||
|  | 	 * @return	void | ||
|  | 	 */ | ||
|  | 	function set_item($item, $value) | ||
|  | 	{ | ||
|  | 		$this->config[$item] = $value; | ||
|  | 	} | ||
|  | 
 | ||
|  | 	// --------------------------------------------------------------------
 | ||
|  | 
 | ||
|  | 	/** | ||
|  | 	 * Assign to Config | ||
|  | 	 * | ||
|  | 	 * This function is called by the front controller (CodeIgniter.php) | ||
|  | 	 * after the Config class is instantiated.  It permits config items | ||
|  | 	 * to be assigned or overriden by variables contained in the index.php file | ||
|  | 	 * | ||
|  | 	 * @access	private | ||
|  | 	 * @param	array | ||
|  | 	 * @return	void | ||
|  | 	 */ | ||
|  | 	function _assign_to_config($items = array()) | ||
|  | 	{ | ||
|  | 		if (is_array($items)) | ||
|  | 		{ | ||
|  | 			foreach ($items as $key => $val) | ||
|  | 			{ | ||
|  | 				$this->set_item($key, $val); | ||
|  | 			} | ||
|  | 		} | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | // END CI_Config class
 | ||
|  | 
 | ||
|  | /* End of file Config.php */ | ||
|  | /* Location: ./system/core/Config.php */ |