日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國(guó)內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁(yè) > php框架 > codeigniter > CodeIgniter core/Config.php

CodeIgniter core/Config.php

來源:程序員人生   發(fā)布時(shí)間:2014-09-18 02:21:01 閱讀次數(shù):3969次
<?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
*/
//配置文件中的參數(shù)
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
*/
//設(shè)置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里面有個(gè)配置項(xiàng)是base_url,它并不是必須配置項(xiàng),
//如果沒有配置,則系統(tǒng)就在這個(gè)地方,自己去它進(jìn)行賦值。
if ($this->config['base_url'] == '')
{
//一般來說,如果通過http訪問網(wǎng)站的話,這個(gè)值都會(huì)有的。
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
{
//如果發(fā)現(xiàn)沒有$_SERVER['HTTP_HOST'],則直接設(shè)置為localhost
$base_url = 'http://localhost/';
}
//設(shè)置 base_url
//保存到base_url中,以后像輔助函數(shù)uri_helper就可以通過base_url()調(diào)用出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
 * 先解釋一下load方法的參數(shù),$file就是配置文件名。配置文件目錄一般為應(yīng)用目錄(application)/config/下
 * 下面會(huì)有很多個(gè)針對(duì)不同方面配置的文件,而我們通過Config組件加載的配置信息都會(huì)保存在Config::$config這個(gè)
 * 屬性里面,所以第二個(gè)參數(shù)$use_sections就是設(shè)置是否當(dāng)前配置文件是否以獨(dú)立一個(gè)數(shù)組的形式充當(dāng)Config::$config
 * 的一個(gè)元素加入,如果為true,則$config是一個(gè)兩層的數(shù)組,如果為false,則單純將配置文件里面的配置信息合并。
 * 例如配置文件abc.php,如果為true,則會(huì)以$config['abc']['xxx']的形式保存,否則直接合并即會(huì)有
 * $config['xxx']。
 * 第三個(gè)參數(shù)只是設(shè)置要不要報(bào)錯(cuò)而已,如果為true,則只會(huì)返回false,如果為false則直接在函數(shù)執(zhí)行時(shí)報(bào)錯(cuò)。
*/
//判斷是否加載
function load($file = '', $use_sections = FALSE, $fail_gracefully = FALSE)
{
//接下來這一行代碼是為了方便我們調(diào)用的時(shí)候既可以以xxx.php的形式傳參,也可以只以xxx(無后綴)的形式。
//另外如果$file為空,則默認(rèn)是加載config.php
$file = ($file == '') ? 'config' : str_replace('.php', '', $file);
$found = FALSE;
$loaded = FALSE;


//判斷是否有自習(xí)寫的配置文件
$check_locations = defined('ENVIRONMENT')
? array(ENVIRONMENT.'/'.$file, $file)
: array($file);

//加載配置文件
//這個(gè)$this->_config_paths默認(rèn)只有應(yīng)用目錄application/
foreach ($this->_config_paths as $path)
{
//分別從某特定環(huán)境的配置目錄和默認(rèn)的配置目錄里面尋找。
foreach ($check_locations as $location)
{
$file_path = $path.'config/'.$location.'.php';
//如果文件已經(jīng)加載過,跳出最上層的foreach循環(huán)
//值為 TRUE 則 in_array() 函數(shù)還會(huì)檢查 $file_path 的類型是否和 $_is_loaded中的相同。
if (in_array($file_path, $this->is_loaded, TRUE))
{
$loaded = TRUE;
continue 2;
}
//沒有加載,文件存在,跳出第二個(gè)foreach循環(huán)
if (file_exists($file_path))
{
//如果是已經(jīng)加載過了,那么在Config::$config里面理應(yīng)當(dāng)有,所以直接跳出最外層循環(huán)。
$found = TRUE;
break;
}
}
//$found是用于判斷在此$path里面,遍歷上面的$check_locations有沒有找到
    //而$load則是用于判斷兩層遍歷以后,最終有沒有把配置文件加載進(jìn)來。
if ($found === FALSE)
{
continue;
}
//引入文件
//配置文件就是在這個(gè)地方加載的
include($file_path);

//下面這句可以看出,我們?cè)诎呐渲梦募锩姹仨氁忻麨?config的數(shù)組。
    //如果配置信息格式不合法,看情況($$fail_gracefully的作用)處理錯(cuò)誤
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.');
}
//是否加入自己的配置參數(shù)信息
//下面就是$use_sections的作用,根據(jù)它來規(guī)定當(dāng)前加載的配置信息的保存形式。
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);
}
//保存哪些文件已經(jīng)加載過,下次再調(diào)用此load方法的時(shí)候,通過它來避免重復(fù)加載,減少不必要的操作。
$this->is_loaded[] = $file_path;

unset($config);


$loaded = TRUE;
log_message('debug', 'Config file loaded: '.$file_path);
break;
}
//找不到配置文件
//加載失敗,按情況處理錯(cuò)誤。
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
* 取得某一配置項(xiàng)的內(nèi)容,如果知道上面Config::load($file, $use_sections, $fail_gracefully);方法
  * 中$use_sections的意義的話,那個(gè)下面的$index意義就很容易理解了。
*/
//取出配置項(xiàng)的值
function item($item, $index = '')
{
//取出系統(tǒng)默認(rèn)的index.php配置項(xiàng)的值
if ($index == '')
{
if ( ! isset($this->config[$item]))
{
return FALSE;
}


$pref = $this->config[$item];
}
//取出用戶增加的配置文件中的配置項(xiàng)的值
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
*/
//在config[$item]不為空的情況下,在最后面增加'/'
//此方法僅僅是對(duì)配置信息進(jìn)行一些修剪處理而已。
function slash_item($item)
{
if ( ! isset($this->config[$item]))
{
return FALSE;
}
//如果此配置項(xiàng)僅僅是包含一些對(duì)配置無效的字符,則直接返回空。
if( trim($this->config[$item]) == '')
{
return '';
}
//保證以一條/結(jié)尾。
return rtrim($this->config[$item], '/').'/';
}


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


/**
* Site URL
* Returns base_url . index_page [. uri_string]
*
* @access public
* @param string the URI string
* @return string
*/
//返回用于訪問的url值:127.0.0.1/ci/index.php/$url.item('url_suffix')
//我們經(jīng)常通過url_helper的site_url獲得我們?cè)陧?xiàng)目中想要的路徑,其實(shí)真正執(zhí)行的是Config::site_url()這個(gè)方法。
function site_url($uri = '')
{
//$uri參數(shù)實(shí)質(zhì)可以是數(shù)組的
if ($uri == '')
{
return $this->slash_item('base_url').$this->item('index_page');
}
//根據(jù)當(dāng)前的路由格式返回相應(yīng)的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
*/
 /**
  * 按當(dāng)前規(guī)定路由格式,返回正確的uri_string.
  * 主要是如果當(dāng)參數(shù)$uri是數(shù)組的時(shí)候,依此拼接到后面,有'/'連接
 */
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
*/
  //拿到系統(tǒng)目錄的路徑而已。
   //正則部分是首先去掉BASEPATH中多余重復(fù)的“/”,然后再拆分為數(shù)組。最后通過end()函數(shù)來拿到系統(tǒng)目錄名。
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
*/
//對(duì)配置文件中的配置項(xiàng)設(shè)置值
//也可以增加配置屬性
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
*/
/**
 * 下面這個(gè)方法在CodeIgniter.php中調(diào)用過,是為把在index.php里設(shè)置的配置信息交給Config組件。 
 * 實(shí)質(zhì)也是通過上面的Config::set_item();方法設(shè)置。
 */
//覆蓋config文件中的配置項(xiàng)的值
//私有方法,只能在類的內(nèi)部訪問。
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 */
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 99视频这里有精品 | 日韩免费中文字幕 | 久久久不卡 | 99免费观看视频 | 久久久久久国产 | 黄www在线观看 | 国产视频高清 | 久久久久久成人精品 | 2023av在线视频 | 国产在线网 | 欧美黄色性视频 | 精品一区二区三区免费毛片爱 | 99精品视频免费在线观看 | 精品久久久久久久久久岛国gif | 国产精品a久久久久 | 欧美在线xxx | 国内精品国产成人国产三级粉色 | 国产日| 日韩一级片 | 国产精品久久久久久久久免费相片 | 一区在线视频 | 欧美成人午夜视频 | 国产在线视频一区二区 | 国产在线9| 国产精品美女一区二区三区 | 日韩免费在线视频 | 久久中文视频 | 欧美日韩精品一二三区 | 一级片免费视频 | 日韩电影一区二区三区 | 亚洲在线一区二区三区 | 国产精品日日做人人爱 | 精品免费国产一区二区三区四区 | 男女午夜视频 | 国产日产久久高清欧美一区 | 青青久久久 | 久久久蜜桃 | 国产精品二区在线观看 | 国产一区二区三区视频在线 | 国产精品福利在线播放 | 久久国产精品久久久久久 |