CodeIgniter框架——源码分析之Config.php
CI框架的配置信息被存储在$config数组中,我们可以添加自己的配置信息或配置文件到$config中:
$this->config->load(‘filename‘); //加载配置文件
$this->config->item(‘xxx‘); //获取配置信息
当然也可以在autoload.php中设置默认加载!
<?php if ( ! defined(‘BASEPATH‘)) exit(‘No direct script access allowed‘); class CI_Config { /** * 配置变量列表 */ var $config = array(); /** * 保存已加载的配置文件列表 */ var $is_loaded = array(); /** * 配置路径 */ var $_config_paths = array(APPPATH); function __construct() { $this->config =& get_config(); log_message(‘debug‘, "Config Class Initialized"); // 如果base_url没有配置,如果没有则动态配置(set_item)base_url 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); } } // -------------------------------------------------------------------- /** * 加载配置文件 * * @param $file string 配置文件的名称 * @param $use_sections boolean 配置变量是否方法默认的Config::$config,还是以独立的数组存在 * 这个其实很简单,例如你加载test_config.php配置文件,配置信息是以$configp[‘test_config‘][×××]还是直接$config[×××]保存 * * @param $fail_gracefully boolean 如果文件加载失败是否报错,如果为TRUE直接返回return false,如果为FALSE,则返回错误信息 * @return boolean if the file was loaded correctly */ 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; } // -------------------------------------------------------------------- /** * 获取配置信息 * * @param $item string 配置元素名 * @param $index string 键名 * 第二个参数,看看load()中的第二个参数就动了,如果为TRUE,当然是以$this->config[$index][$item]获取配置信息 * * * @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; } // -------------------------------------------------------------------- /** * 这个函数简单,返回修剪后的以“/”结尾的配置信息 * PS:下面会用到 */ function slash_item($item) { if ( ! isset($this->config[$item])) { return FALSE; } if( trim($this->config[$item]) == ‘‘) { return ‘‘; } return rtrim($this->config[$item], ‘/‘).‘/‘; } // -------------------------------------------------------------------- /** * url_helper的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) { $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 */ function base_url($uri = ‘‘) { return $this->slash_item(‘base_url‘).ltrim($this->_uri_string($uri), ‘/‘); } // ------------------------------------------------------------- /** *返回uri_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; } // -------------------------------------------------------------------- /** * 获取系统的目录路径 */ function system_url() { $x = explode("/", preg_replace("|/*(.+?)/*$|", "\\1", BASEPATH)); return $this->slash_item(‘base_url‘).end($x).‘/‘; } // -------------------------------------------------------------------- /** * 重新动态设置配置信息 */ function set_item($item, $value) { $this->config[$item] = $value; } // -------------------------------------------------------------------- /** * 动态添加配置信息,这个在CodeIgniter.php中有用,将index.php中配置信息添加到config组件中 */ function _assign_to_config($items = array()) { if (is_array($items)) { foreach ($items as $key => $val) { $this->set_item($key, $val); } } } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。