検索

CI框架源码阅读---------Config.php
文件地址:./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 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	 */	function __construct()	{		$this->config =& get_config();		log_message('debug', "Config Class Initialized");		// Set the base_url automatically if none was provided 假如		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);		}	}	// --------------------------------	/**	 * 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	 */	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 = '')	{		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	 * Returns base_url [. uri_string]	 *	 * @access public	 * @param string $uri	 * @return string	 */	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 */


声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPの現在のステータス:Web開発動向を見てくださいPHPの現在のステータス:Web開発動向を見てくださいApr 13, 2025 am 12:20 AM

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHP対その他の言語:比較PHP対その他の言語:比較Apr 13, 2025 am 12:19 AM

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHP対Python:コア機能と機能PHP対Python:コア機能と機能Apr 13, 2025 am 12:16 AM

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHP:Web開発の重要な言語PHP:Web開発の重要な言語Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

PHP:多くのウェブサイトの基礎PHP:多くのウェブサイトの基礎Apr 13, 2025 am 12:07 AM

PHPが多くのWebサイトよりも優先テクノロジースタックである理由には、その使いやすさ、強力なコミュニティサポート、広範な使用が含まれます。 1)初心者に適した学習と使用が簡単です。 2)巨大な開発者コミュニティと豊富なリソースを持っています。 3)WordPress、Drupal、その他のプラットフォームで広く使用されています。 4)Webサーバーとしっかりと統合して、開発の展開を簡素化します。

誇大広告を超えて:今日のPHPの役割の評価誇大広告を超えて:今日のPHPの役割の評価Apr 12, 2025 am 12:17 AM

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPの弱い参照は何ですか、そしていつ有用ですか?PHPの弱い参照は何ですか、そしていつ有用ですか?Apr 12, 2025 am 12:13 AM

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

PHPで__invoke Magicメソッドを説明してください。PHPで__invoke Magicメソッドを説明してください。Apr 12, 2025 am 12:07 AM

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。