用户
 找回密码
 入住 CI 中国社区
搜索
查看: 10407|回复: 5
收起左侧

ci源码分析--libraries/config

[复制链接]
发表于 2009-3-11 11:35:29 | 显示全部楼层 |阅读模式
PHP复制代码
 
<?php  if ( ! defined('BASEPATH')) exit('不允许直接访问');
class Config {
 var $config = array();
 var $is_loaded = array();
 function Config()
 {
  //自动加载配置文件 APPPATH/config/config.php
  $this->config =& get_config();
  log_message('debug', "配置类初始化成功");
 }
    //手工加载配置文件
 //参数1:配置文件名,参数2:是否把配置单独存入一个数组(为了分开多个配置文件),参数3:加载不成功,是否显示错误
 function load($file = '', $use_sections = FALSE, $fail_gracefully = FALSE)
 {
  //默认加载config.php
  $file = ($file == '') ? 'config' : str_replace(EXT, '', $file);
     
  //如果已经载入了配置文件,直接返回
  if (in_array($file, $this->is_loaded, TRUE))
  {
   return TRUE;
  }
        //检查配置文件是否存在
  if ( ! file_exists(APPPATH.'config/'.$file.EXT))
  {
   //如果加载不成功不显示错误
   if ($fail_gracefully === TRUE)
   {
    return FALSE;
   }
   //显示错误
   show_error('配置文件不存在.');
  }
 
        //载入配置文件
  include(APPPATH.'config/'.$file.EXT);
  //判断配置文件格式是否正确
  if ( ! isset($config) OR ! is_array($config))
  {
   //如果加载不成功不显示错误
   if ($fail_gracefully === TRUE)
   {
    return FALSE;
   }
   //显示错误
   show_error('你的配置文件格式不正确.');
  }
  //读出配置文件到指定数组
  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;
  //释放变量
  unset($config);
  log_message('debug', '载入配置文件: config/'.$file.EXT);
  return TRUE;
 }
   
 //获取单一配置元素
 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;
 }
 //设置一项元素
 function set_item($item, $value)
 {
  $this->config[$item] = $value;
 }
    //得到你网站的URL
 function site_url($uri = '')
 {
  if (is_array($uri))
  {
   $uri = implode('/', $uri);
  }
  if ($uri == '')
  {
   return $this->_slash_item('base_url').$this->item('index_page');
  }
  else
  {
   $suffix = ($this->item('url_suffix') == FALSE) ? '' : $this->item('url_suffix');
   return $this->_slash_item('base_url').$this->_slash_item('index_page').preg_replace("|^/*(.+?)/*$|", "[url=file://\\1]\\1[/url]", $uri).$suffix;
  }
 }
    //得到你系统的URL
 function system_url()
 {
  $x = explode("/", preg_replace("|/*(.+?)/*$|", "[url=file://\\1]\\1[/url]", BASEPATH));
  return $this->_slash_item('base_url').end($x).'/';
 }
 //私有函数,用于取出配置文件项目并格式化
 function _slash_item($item)
 {
  if ( ! isset($this->config[$item]))
  {
   return FALSE;
  }
  $pref = $this->config[$item];
  if ($pref != '' && substr($pref, -1) != '/')
  {
   $pref .= '/';
  }
  return $pref;
 }
}
?>
 
复制代码
发表于 2009-3-11 13:03:40 | 显示全部楼层
辛苦了。。呵呵。。最好再做一个汇总,以方便大家查看
 楼主| 发表于 2009-3-11 13:23:28 | 显示全部楼层
就是做个索引贴呗,等我都弄完了就做
发表于 2010-1-3 16:35:27 | 显示全部楼层
留个影子
发表于 2010-5-6 16:46:57 | 显示全部楼层
能告诉我~
  preg_replace("|/*(.+?)/*$|", "\1", BASEPATH)

它替换了什么么?为什么我觉得他什么都没替换?
发表于 2011-1-28 10:16:04 | 显示全部楼层
顶顶,正在看CI源码,帮且很大

本版积分规则