PHP读取配置文件类实例(可读取ini,yaml,xml等)


Posted in PHP onJuly 28, 2015

本文实例讲述了PHP读取配置文件类实例。分享给大家供大家参考。具体如下:

<?php 
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 implemented', E_USER_ERROR ); 
 } 
} 
class Settings_PHP extends Settings { 
 function load($file) { 
 if (file_exists ( $file ) == false) { 
  return false; 
 } 
 // Include file 
 include ($file); 
 unset ( $file ); 
 // Get declared variables 
 $vars = get_defined_vars (); 
 // Add to settings array 
 foreach ( $vars as $key => $val ) { 
  if ($key == 'this') 
  continue;  
  $this->_settings [$key] = $val; 
 } 
 } 
} 
class Settings_INI extends Settings { 
 function load($file) { 
 if (file_exists ( $file ) == false) { 
  return false; 
 } 
 $this->_settings = parse_ini_file ( $file, true ); 
 } 
} 
class Settings_YAML extends Settings { 
 function load($file) { 
 if (file_exists ( $file ) == false) { 
  return false; 
 } 
 include ('spyc.php'); 
 $this->_settings = Spyc::YAMLLoad ( $file ); 
 } 
} 
class Settings_XML extends Settings { 
 function load($file) { 
 if (file_exists ( $file ) == false) { 
  return false; 
 } 
 include ('xmllib.php'); 
 $xml = file_get_contents ( $file ); 
 $data = XML_unserialize ( $xml ); 
 $this->_settings = $data ['settings']; 
 } 
} 
?>
/** 
* 针对PHP的配置,如有配置文件 
*config.php 
<?php 
$db = array(); 
// Enter your database name here: 
$db['name'] = 'test'; 
// Enter the hostname of your MySQL server: 
$db['host'] = 'localhost'; 
?> 
//具体调用: 
include ('settings.php'); //原始环境假设每个类为单独的一个类名.php文件 
// Load settings (PHP) 
$settings = new Settings_PHP; 
$settings->load('config.php'); 
echo 'PHP: ' . $settings->get('db.host') . ''; 
* 
*/ 
 读取INI文件,主要用到parser_ini_file函数,该函数返回一个数组,如第二个参数为true时则返回多维数组
/** 
* ini例子:config.ini 
* 
[db] 
name = test 
host = localhost 
//调用例子: 
$settings = new Settings_INI; 
$settings->load('config.ini'); 
echo 'INI: ' . $settings->get('db.host') . ''; 
*/ 
 读取XML文件,需要用到XML_PARSER,xmllib.php
/** 
* XML例子:config.xml 
<?xml version="1.0" encoding="UTF-8"?> 
<settings> 
<db> 
 <name>test</name> 
 <host>localhost</host> 
</db> 
</settings> 
// Load settings (XML) 
$settings = New Settings_XML; 
$settings->load('config.xml'); 
echo 'XML: ' . $settings->get('db.host') . ''; 
* 
*/ 
 读取YAML格式文件,使用YAML必须使用到SPYC这个库
/** 
YAML配置例子:config.yaml 
db: 
 name: test 
 host: localhost 
// Load settings (YAML) 
$settings = New Settings_YAML; 
$settings->load('config.yaml'); 
echo 'YAML: ' . $settings->get('db.host') . ''; 
*/

1. ini有点过时??
2. xml比较好,
3. yaml很好,但是毕竟没有标准化。
4. txt要自己组织格式,开放性不好。
5. 类序列化。比较好,但是不熟悉的人使用比较麻烦!
6. php定义常量(你不用修改数据吗?)

所以:xml最好。

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
数据库查询记录php 多行多列显示
Aug 15 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
Jul 04 PHP
PHP file_exists问题杂谈
May 07 PHP
解析PHP中的正则表达式以及模式匹配
Jun 19 PHP
PHP的Yii框架的常用日志操作总结
Dec 08 PHP
CodeIgniter配置之SESSION用法实例分析
Jan 19 PHP
微信支付开发动态链接Native支付
Jul 12 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
Nov 01 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
Jun 10 PHP
PHP扩展mcrypt实现的AES加密功能示例
Jan 29 PHP
PHP xpath()函数讲解
Feb 11 PHP
PHP Ajax跨域问题解决方案代码实例
Aug 01 PHP
PHP实现简单的新闻发布系统实例
Jul 28 #PHP
PHP实现的memcache环形队列类实例
Jul 28 #PHP
如何实现php图片等比例缩放
Jul 28 #PHP
PHP封装CURL扩展类实例
Jul 28 #PHP
php图像处理类实例
Jul 28 #PHP
图文介绍PHP添加Redis模块及连接
Jul 28 #PHP
PHP生成树的方法
Jul 28 #PHP
You might like
社区(php&amp;&amp;mysql)一
2006/10/09 PHP
thinkphp控制器调度使用示例
2014/02/24 PHP
Yii不依赖Model的表单生成器用法实例
2014/12/04 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
2017/08/01 PHP
javascript globalStorage类代码
2009/06/04 Javascript
js 数组实现一个类似ruby的迭代器
2009/10/27 Javascript
分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
2011/12/12 Javascript
JavaScript词法作用域与调用对象深入理解
2012/11/29 Javascript
jQuery学习之prop和attr的区别示例介绍
2013/11/15 Javascript
JS 去除Array中的null值示例代码
2013/11/20 Javascript
JavaScript使用cookie实现记住账号密码功能
2015/04/27 Javascript
javascript加减乘除的简单实例
2016/07/12 Javascript
在线引用最新jquery文件的实现方法
2016/08/26 Javascript
Vue自定义指令拖拽功能示例
2017/02/17 Javascript
关于预加载InstantClick的问题解决方法
2017/09/12 Javascript
el-select数据过多懒加载的解决(loadmore)
2019/05/29 Javascript
element-ui 远程搜索组件el-select在项目中组件化的实现代码
2019/12/04 Javascript
[51:17]Mski vs VGJ.S Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
简单介绍Python的轻便web框架Bottle
2015/04/08 Python
python字典get()方法用法分析
2015/04/17 Python
pip matplotlib报错equired packages can not be built解决
2018/01/06 Python
Pycharm设置界面全黑的方法
2018/05/23 Python
python3.6使用pickle序列化class的方法
2018/10/22 Python
简单了解django orm中介模型
2019/07/30 Python
python 动态调用函数实例解析
2019/10/21 Python
PyQt5-QDateEdit的简单使用操作
2020/07/12 Python
如何在python中处理配置文件代码实例
2020/09/27 Python
用HTML5制作数字时钟的教程
2015/05/11 HTML / CSS
什么是典型的软件三层结构?软件设计为什么要分层?软件分层有什么好处?
2012/03/14 面试题
傲盾软件面试题
2015/08/17 面试题
怎样有效的进行自我评价
2013/10/06 职场文书
家具促销活动方案
2014/02/16 职场文书
小学六年级学生评语
2014/04/22 职场文书
感恩母亲节演讲稿
2014/05/07 职场文书
餐饮店长岗位职责
2015/04/14 职场文书
Java 中的 Lambda List 转 Map 的多种方法详解
2022/07/07 Java/Android