当前位置: 首页 > 工具软件 > Spyc PHP > 使用案例 >

PHP常用工具类之读取配置文件类(php,ini,xml,yaml)

薛朝
2023-12-01

      项目中一些常用且重要的常量参数往往不会直接定义在类对象中,都会以配置文件的形式单独存在,这样既安全又便于修改。对于php中常用的配置文件基本分四类:php文件、ini文件、xml文件、yaml文件。其中以xml文件最为常用,原因是在WebServer交互通信中xml常常作为中间件的存在(这种形式由于配置过程较为复杂,现在渐渐淘汰,当下流行以json的形式传递数据)。

      为了以后方便使用,也是对自己知识点的总结,借鉴了一些网上大神的思路,将读取配置文件写成工具类

class Settings{
	var $_settings = array();

	function get($var){
		$var = explode('.',$var);
		$result = $this->_settings;
		foreach($var as $key){
			if(!isset($result[$key])){
				return false;
			}
			$result = $result[$key];
		}
		return $result;
	}


	function load(){
		trigger_error('Not yet implement',E_USER_ERROR);
	}

}

/*
	读.php类型配置文件
 */
class Settings_PHP extends Settings{
	function load($file=null){
		if(file_exists($file)==false){
			return false;
		}
		//引入该文件
		include($file);
		unset($file);

		$vars = get_defined_vars();

		foreach ($vars as $key => $val) {
			if($key == 'this')
				continue;
			$this->_settings[$key] = $val;
		}

	}

}

/*
	读取.ini类型配置文件	
 */

class Settings_INI extends Settings{

	function load($file=null){
		if(file_exists($file)==false){
			return false;
		}
		$this->_settings = parse_ini_file($file,true);

	}
}

/*
	读取.yaml类型文件
 */
class Settings_YAML extends Settings{
	function load($file=null){
		if(file_exists($file)==false){
			return false;
		}

		include('Spyc.php');
		$this->_settings = Spyc::YAMLLoad($file);

	}
}

/*
	读取.xml类型配置文件
 */
class Settings_XML extends Settings{
	function load($file=null){
		if(file_exists($file)==false){
			return false;
		}
		//simplexml解析出来的xml文件是对象和数组的形式,
 		//需要用递归的方法循环类型强制转换,将对象转换成数组
		$simplexml = simplexml_load_file($file);
		
		$this->_settings = $this->toArray($simplexml);

	}
	
	//将对象转换成数组方法
	function toArray($sml){
		$arr = (array)$sml;
		foreach ($arr as $k => $v) {
			if($v instanceof simplexmlelement || is_array($v)){
				$arr[$k] = $this->toArray($v);
			}
			
		}
		return $arr;
	}
}

  注:

1.其中关于yaml文件类的解析需要引入一个外部文件Spyc.php。此文件可在此https://github.com/mustangostang/spyc/下载源码然后引入到项目中。

2.关于xml文件的解析可用另一种安装xmllib拓展,然后引用的形式,方法请自行查找!

调用示例:

1.config.php配置文件

<?php
$db = array(
		"servername" => "localhost",
		"port"       => 3306,
		"username"   => "root",
		"password"   => "root",
		"dbname"     => "test",
	);



?>

2.config.ini配置文件

[mysql]
servername = localhost
port       = 3306
username   = root
password   = root
dbname     = test

[url]
baidu = https://www.baidu.com

3.config.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<setting>
	<db>
		<host>loclhost</host>
		<port>3306</port>
		<username>root</username>
		<password>root</password>
		<dbname>test</dbname>
	</db>

</setting>

4.config.yaml配置文件(注意:配置项键值对之间,值与前面的冒号间需要一个空格)

db:
  host: localhost
  port: 3306
  username: root
  password: root
  dbname: test

 

测试代码调用:

$set1 = new Settings_PHP;
$set1->load('config.php');
$val1 = $set1->get('db'); 
//print_r($val1);


$set2 = new Settings_INI;
$set2->load('config.ini');
$val2 = $set2->get('url'); 
//print_r($val2);


$set3 = new Settings_XML;
$set3->load('config.xml');
$val3 = $set3->get('db'); 
print_r($val3);


$set4 = new Settings_YAML;
$set4->load('config.yaml');
$val4 = $set4->get('db'); 
//print_r($val4);

 

 类似资料: