CI框架源码阅读---------Config.php

http://blog.csdn.net/liushuai_andy/article/details/8649135

文件地址:./system/core/Config.php
主要作用:管理配置
1.成员属性$config 所有已加载配置的值的列表
2.成员属性$is_loaded 所有加载配置文件的列表
3.成员属性$_config_paths 当需要加载配置文件的时候搜索路径的列表
4.__construct() 构造方法程序会首先自动执行这个方法
它所做的内容主要有两个  a)获取配置赋值给成员属性$config
b)设置配置中的base_url
5.load($file = '', $use_sections = FALSE, $fail_gracefully = FALSE)
加载配置文件
$file 是你自定义的配置文件的文件名,这个文件名没有 .php 的扩展名. 
$use_sections  如果你需要加载多个自定义配置文件,一般情况下它们会被合并成一个数组。然而,如果在不同的配置文件中存在同名的索引,那么会发生冲突。为了避免这个问题,你可以把第二个参数设置为 TRUE ,这可以使每个配置文件的内容存储在一个单独的数组中,数组的索引就是配置文件的文件名。
$fail_gracefully允许屏蔽当配置文件不存在时产生的错误信息:
(0)过滤并设置$file 变量
(1)初始化$founf 为FALSE 用于判断文件是否存在
(2)初始化$loaded为FALSE 用于判断文件是否被加载
(3)检测文件路径如果有环境变量添加环境变量
(4)进入foreach遍历文件路径,并查找文件是否被加载和存在
(5)如果文件不存在跳出foreach循环
(6)加载文件
(7)判断$config是否存在,这个$config 应该是加载的文件中定义的
(8)判断$use_sections 如果为真则将使每个配置文件的内容存储在一个单独的数组中,数组的索引就是配置文件的文件名。
  如果为假则所有配置文件会被合并成一个数组
(9)将文件添加进is_loaded数组中,并销毁$config
(10)$loaded 设置为true log记录 跳出循环
(11)如果loaded为false并且$fail_gracefully不等于true 显示错误日志


6.item() 获取一个配置项
$item 配置项的名字
$index  如果配置是一个数组的时候,这一项是数组索引名字
(1)判断index是否为空
(2)如果index为空,判断$this->config[$item]是否存在,如果不存在返回,存在,赋值给$pref
(3)如果index不为空,判断$this->config[$index]是否存在,判断$this->config[$index][$item]是否存在,将$this->config[$index][$item]赋值给$pref
(4)返回$pref


7.slash_item() 获取一个配置项并添加/
$item 配置项的名字
(1)判断配置项是否存在不存在返回false
(2)判断配置项是否为空如果是空返回''
(3)在配置值的后面添加/并返回。


8.site_url() 该函数得到你网站的 URL,其中包含了你在 config 文件中设置的 "index" 的值。
$uri uri字符串就是访问路径所带的参数
(1) 如果$uri = '' 返回由base_url和index_page组成的url
(2) 判断$this->item('enable_query_strings')真假,并返回不同形式的地址。(这一项是在application/config/config.php文件中配置的。用来区分传参方式,如果为false就是默认的传参方式example.com/who/what/where/。如果为true就是 example.com/index.php?c=controller&m=function这样的传参方式。)

9.base_url() 该函数返回站点的根 URL,可以在这个函数后拼接一个 URL 路径,用以生成 CSS 或图片文件的 URL。

10._uri_string() 构建uri串让site_url(),base_url()两个函数使用。


11.system_url() 该函数得到 system 文件夹的 URL。


12.set_item()  设置一个配置项


13._assign_to_config() 设置多个配置项(以数组的形式key是要设置的配置项的名字,value 是配置项的值)


源码:

[php]  view plain copy
  1. <?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');  
  2. /** 
  3.  * CodeIgniter 
  4.  * 
  5.  * An open source application development framework for PHP 5.1.6 or newer 
  6.  * 
  7.  * @package     CodeIgniter 
  8.  * @author      ExpressionEngine Dev Team 
  9.  * @copyright   Copyright (c) 2008 - 2011, EllisLab, Inc. 
  10.  * @license     http://codeigniter.com/user_guide/license.html 
  11.  * @link        http://codeigniter.com 
  12.  * @since       Version 1.0 
  13.  * @filesource 
  14.  */  
  15.   
  16. // ------------------------------------------------------------------------  
  17.   
  18. /** 
  19.  * CodeIgniter Config Class 
  20.  * 
  21.  * This class contains functions that enable config files to be managed 
  22.  * 
  23.  * @package     CodeIgniter 
  24.  * @subpackage  Libraries 
  25.  * @category    Libraries 
  26.  * @author      ExpressionEngine Dev Team 
  27.  * @link        http://codeigniter.com/user_guide/libraries/config.html 
  28.  */  
  29. class CI_Config {  
  30.   
  31.     /** 
  32.      * List of all loaded config values 
  33.      * 
  34.      * @var array 
  35.      */  
  36.     var $config = array();  
  37.     /** 
  38.      * List of all loaded config files 
  39.      * 
  40.      * @var array 
  41.      */  
  42.     var $is_loaded = array();  
  43.     /** 
  44.      * List of paths to search when trying to load a config file 
  45.      * 
  46.      * @var array 
  47.      */  
  48.     var $_config_paths = array(APPPATH);  
  49.   
  50.     /** 
  51.      * Constructor 
  52.      * 
  53.      * Sets the $config data from the primary config.php file as a class variable 
  54.      * 
  55.      * @access   public 
  56.      * @param   string  the config file name 
  57.      * @param   boolean  if configuration values should be loaded into their own section 
  58.      * @param   boolean  true if errors should just return false, false if an error message should be displayed 
  59.      * @return  boolean  if the file was successfully loaded or not 
  60.      */  
  61.     function __construct()  
  62.     {  
  63.         $this->config =& get_config();  
  64.         log_message('debug'"Config Class Initialized");  
  65.   
  66.         // Set the base_url automatically if none was provided 假如  
  67.         if ($this->config['base_url'] == '')  
  68.         {  
  69.             if (isset($_SERVER['HTTP_HOST']))  
  70.             {  
  71.                 $base_url = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off' ? 'https' : 'http';  
  72.                 $base_url .= '://'$_SERVER['HTTP_HOST'];  
  73.                 $base_url .= str_replace(basename($_SERVER['SCRIPT_NAME']), ''$_SERVER['SCRIPT_NAME']);  
  74.             }  
  75.   
  76.             else  
  77.             {  
  78.                 $base_url = 'http://localhost/';  
  79.             }  
  80.   
  81.             $this->set_item('base_url'$base_url);  
  82.         }  
  83.     }  
  84.   
  85.     // --------------------------------------------------------------------  
  86.   
  87.     /** 
  88.      * Load Config File 
  89.      * 
  90.      * @access  public 
  91.      * @param   string  the config file name 
  92.      * @param   boolean  if configuration values should be loaded into their own section 
  93.      * @param   boolean  true if errors should just return false, false if an error message should be displayed 
  94.      * @return  boolean if the file was loaded correctly 
  95.      */  
  96.     function load($file = ''$use_sections = FALSE, $fail_gracefully = FALSE)  
  97.     {  
  98.         $file = ($file == '') ? 'config' : str_replace('.php'''$file);  
  99.         $found = FALSE;  
  100.         $loaded = FALSE;  
  101.           
  102.         $check_locations = defined('ENVIRONMENT')  
  103.             ? array(ENVIRONMENT.'/'.$file$file)  
  104.             : array($file);  
  105.   
  106.         foreach ($this->_config_paths as $path)  
  107.         {  
  108.             foreach ($check_locations as $location)  
  109.             {  
  110.                 $file_path = $path.'config/'.$location.'.php';  
  111.   
  112.                 if (in_array($file_path$this->is_loaded, TRUE))  
  113.                 {  
  114.                     $loaded = TRUE;  
  115.                     continue 2;  
  116.                 }  
  117.   
  118.                 if (file_exists($file_path))  
  119.                 {  
  120.                     $found = TRUE;  
  121.                     break;  
  122.                 }  
  123.             }  
  124.   
  125.             if ($found === FALSE)  
  126.             {  
  127.                 continue;  
  128.             }  
  129.   
  130.             include($file_path);  
  131.   
  132.             if ( ! isset($config) OR ! is_array($config))  
  133.             {  
  134.                 if ($fail_gracefully === TRUE)  
  135.                 {  
  136.                     return FALSE;  
  137.                 }  
  138.                 show_error('Your '.$file_path.' file does not appear to contain a valid configuration array.');  
  139.             }  
  140.   
  141.             if ($use_sections === TRUE)  
  142.             {  
  143.                 if (isset($this->config[$file]))  
  144.                 {  
  145.                     $this->config[$file] = array_merge($this->config[$file], $config);  
  146.                 }  
  147.                 else  
  148.                 {  
  149.                     $this->config[$file] = $config;  
  150.                 }  
  151.             }  
  152.             else  
  153.             {  
  154.                 $this->config = array_merge($this->config, $config);  
  155.             }  
  156.   
  157.             $this->is_loaded[] = $file_path;  
  158.             unset($config);  
  159.   
  160.             $loaded = TRUE;  
  161.             log_message('debug''Config file loaded: '.$file_path);  
  162.             break;  
  163.         }  
  164.   
  165.         if ($loaded === FALSE)  
  166.         {  
  167.             if ($fail_gracefully === TRUE)  
  168.             {  
  169.                 return FALSE;  
  170.             }  
  171.             show_error('The configuration file '.$file.'.php does not exist.');  
  172.         }  
  173.   
  174.         return TRUE;  
  175.     }  
  176.   
  177.     // --------------------------------------------------------------------  
  178.   
  179.     /** 
  180.      * Fetch 取得,拿来 a config file item 
  181.      * 
  182.      * 
  183.      * @access  public 
  184.      * @param   string  the config item name 
  185.      * @param   string  the index name 
  186.      * @param   bool 
  187.      * @return  string 
  188.      */  
  189.     function item($item$index = '')  
  190.     {  
  191.         if ($index == '')  
  192.         {  
  193.             if ( ! isset($this->config[$item]))  
  194.             {  
  195.                 return FALSE;  
  196.             }  
  197.   
  198.             $pref = $this->config[$item];  
  199.         }  
  200.         else  
  201.         {  
  202.             if ( ! isset($this->config[$index]))  
  203.             {  
  204.                 return FALSE;  
  205.             }  
  206.   
  207.             if ( ! isset($this->config[$index][$item]))  
  208.             {  
  209.                 return FALSE;  
  210.             }  
  211.   
  212.             $pref = $this->config[$index][$item];  
  213.         }  
  214.   
  215.         return $pref;  
  216.     }  
  217.   
  218.     // --------------------------------------------------------------------  
  219.   
  220.     /** 
  221.      * Fetch a config file item - adds slash after item (if item is not empty) 
  222.      * 
  223.      * @access  public 
  224.      * @param   string  the config item name 
  225.      * @param   bool 
  226.      * @return  string 
  227.      */  
  228.     function slash_item($item)  
  229.     {  
  230.         if ( ! isset($this->config[$item]))  
  231.         {  
  232.             return FALSE;  
  233.         }  
  234.         if( trim($this->config[$item]) == '')  
  235.         {  
  236.             return '';  
  237.         }  
  238.   
  239.         return rtrim($this->config[$item], '/').'/';  
  240.     }  
  241.   
  242.     // --------------------------------------------------------------------  
  243.   
  244.     /** 
  245.      * Site URL 
  246.      * Returns base_url . index_page [. uri_string] 
  247.      * 
  248.      * @access  public 
  249.      * @param   string  the URI string 
  250.      * @return  string 
  251.      */  
  252.     function site_url($uri = '')  
  253.     {  
  254.         if ($uri == '')  
  255.         {  
  256.             return $this->slash_item('base_url').$this->item('index_page');  
  257.         }  
  258.   
  259.         if ($this->item('enable_query_strings') == FALSE)  
  260.         {  
  261.             $suffix = ($this->item('url_suffix') == FALSE) ? '' : $this->item('url_suffix');  
  262.             return $this->slash_item('base_url').$this->slash_item('index_page').$this->_uri_string($uri).$suffix;  
  263.         }  
  264.         else  
  265.         {  
  266.             return $this->slash_item('base_url').$this->item('index_page').'?'.$this->_uri_string($uri);  
  267.         }  
  268.     }  
  269.   
  270.     // -------------------------------------------------------------  
  271.   
  272.     /** 
  273.      * Base URL 
  274.      * Returns base_url [. uri_string] 
  275.      * 
  276.      * @access public 
  277.      * @param string $uri 
  278.      * @return string 
  279.      */  
  280.     function base_url($uri = '')  
  281.     {  
  282.         return $this->slash_item('base_url').ltrim($this->_uri_string($uri), '/');  
  283.     }  
  284.   
  285.     // -------------------------------------------------------------  
  286.   
  287.     /** 
  288.      * Build URI string for use in Config::site_url() and Config::base_url() 
  289.      * 
  290.      * @access protected 
  291.      * @param  $uri 
  292.      * @return string 
  293.      */  
  294.     protected function _uri_string($uri)  
  295.     {  
  296.         if ($this->item('enable_query_strings') == FALSE)  
  297.         {  
  298.             if (is_array($uri))  
  299.             {  
  300.                 $uri = implode('/'$uri);  
  301.             }  
  302.             $uri = trim($uri'/');  
  303.         }  
  304.         else  
  305.         {  
  306.             if (is_array($uri))  
  307.             {  
  308.                 $i = 0;  
  309.                 $str = '';  
  310.                 foreach ($uri as $key => $val)  
  311.                 {  
  312.                     $prefix = ($i == 0) ? '' : '&';  
  313.                     $str .= $prefix.$key.'='.$val;  
  314.                     $i++;  
  315.                 }  
  316.                 $uri = $str;  
  317.             }  
  318.         }  
  319.         return $uri;  
  320.     }  
  321.   
  322.     // --------------------------------------------------------------------  
  323.   
  324.     /** 
  325.      * System URL 
  326.      * 
  327.      * @access  public 
  328.      * @return  string 
  329.      */  
  330.     function system_url()  
  331.     {  
  332.         $x = explode("/", preg_replace("|/*(.+?)/*$|""\\1", BASEPATH));  
  333.         return $this->slash_item('base_url').end($x).'/';  
  334.     }  
  335.   
  336.     // --------------------------------------------------------------------  
  337.   
  338.     /**  
  339.      * Set a config file item  
  340.      *  
  341.      * @access  public  
  342.      * @param   string  the config item key  
  343.      * @param   string  the config item value  
  344.      * @return  void  
  345.      */  
  346.     function set_item($item$value)  
  347.     {  
  348.         $this->config[$item] = $value;  
  349.     }  
  350.   
  351.     // --------------------------------------------------------------------  
  352.   
  353.     /** 
  354.      * Assign to Config 
  355.      * 
  356.      * This function is called by the front controller (CodeIgniter.php) 
  357.      * after the Config class is instantiated.  It permits config items 
  358.      * to be assigned or overriden by variables contained in the index.php file 
  359.      * 
  360.      * @access  private 
  361.      * @param   array 
  362.      * @return  void 
  363.      */  
  364.     function _assign_to_config($items = array())  
  365.     {  
  366.         if (is_array($items))  
  367.         {  
  368.             foreach ($items as $key => $val)  
  369.             {  
  370.                 $this->set_item($key$val);  
  371.             }  
  372.         }  
  373.     }  
  374. }  
  375.   
  376. // END CI_Config class  
  377.   
  378. /* End of file Config.php */  
  379. /* Location: ./system/core/Config.php */  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值