CodeIgniter .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 {


/**
* List of all loaded config values
*
* @var array
*/
var $config = array();
/**
* List of all loaded config files
*
* @var array
*/

var $is_loaded = array();
/**
* List of paths to search when trying to load a config file
*
* @var 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
*/
//设置config中的base_url
function __construct()
{
//得到config下的config.php中的配置信息
$this->config =& get_config();
//日志记录
log_message('debug', "Config Class Initialized");


// Set the base_url automatically if none was provided
//在config/config.php
if ($this->config['base_url'] == '')
{
if (isset($_SERVER['HTTP_HOST']))
{
//判断是否通过https方式访问。
$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
{
//如果发现没有$_SERVER['HTTP_HOST'],则直接设置为localhost
$base_url = 'http://localhost/';
}
//设置 base_url
//保存到base_url中,以后像辅助函数uri_helper就可以通过base_url()调用出Config组件此值。
$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
*/
/**
 * Load Config File
 
function load($file = '', $use_sections = FALSE, $fail_gracefully = FALSE)
{
$file = ($file == '') ? 'config' : str_replace('.php', '', $file);
$found = FALSE;
$loaded = FALSE;

$check_locations = defined('ENVIRONMENT')
? array(ENVIRONMENT.'/'.$file, $file)
: array($file);

foreach ($this->_config_paths as $path)
{
foreach ($check_locations as $location)
{
$file_path = $path.'config/'.$location.'.php';
if (in_array($file_path, $this->is_loaded, TRUE))
{
$loaded = TRUE;
continue 2;
}
if (file_exists($file_path))
{
$found = TRUE;
break;
}
if ($found === FALSE)
{
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);
break;
}
if ($loaded === FALSE)
{
if ($fail_gracefully === TRUE)
{
return FALSE;
}
show_error('The configuration file '.$file.'.php does 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 (if item is not empty)
*
* @access  public
* @param  string the config item name
* @param  bool
* @return  string
*/
function slash_item($item)
{
if ( ! isset($this->config[$item]))
{
return FALSE;
}
if( trim($this->config[$item]) == '')
{
return '';
}
return rtrim($this->config[$item], '/').'/';
}


// --------------------------------------------------------------------


/**
* Site URL
* Returns base_url . index_page [. uri_string]
*
* @access  public
* @param  string the URI string
* @return  string
*/
function site_url($uri = '')
{
//$uri参数实质可以是数组的
if ($uri == '')
{
return $this->slash_item('base_url').$this->item('index_page');
}
//根据当前的路由格式返回相应的uri_string
if ($this->item('enable_query_strings') == FALSE)
{
$suffix = ($this->item('url_suffix') == FALSE) ? '' : $this->item('url_suffix');
return $this->slash_item('base_url').$this->slash_item('index_page').$this->_uri_string($uri).$suffix;
}
else
{
return $this->slash_item('base_url').$this->item('index_page').'?'.$this->_uri_string($uri);
}
}


// -------------------------------------------------------------


/**
* Base URL
* Returns base_url [. uri_string]
*
* @access public
* @param string $uri
* @return string
*/
//返回base_url
function base_url($uri = '')
{
return $this->slash_item('base_url').ltrim($this->_uri_string($uri), '/');
}


// -------------------------------------------------------------


/**
* Build URI string for use in Config::site_url() and Config::base_url()
*
* @access protected
* @param  $uri
* @return string
*/
 /**
 */
protected function _uri_string($uri)
{
if ($this->item('enable_query_strings') == FALSE)
{
if (is_array($uri))
{
$uri = implode('/', $uri);
}
$uri = trim($uri, '/');
}
else
{
if (is_array($uri))
{
$i = 0;
$str = '';
foreach ($uri as $key => $val)
{
$prefix = ($i == 0) ? '' : '&';
$str .= $prefix.$key.'='.$val;
$i++;
}
$uri = $str;
}
}
   return $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 */

posted @ 2021-08-10 16:19  v17166570219  阅读(40)  评论(0)    收藏  举报