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 相关文章推荐
PHP5在Apache下的两种模式的安装
Sep 05 PHP
PHP面向对象的使用教程 简单数据库连接
Nov 25 PHP
PHP小教程之实现链表
Jun 09 PHP
浅析PHP程序设计中的MVC编程思想
Jul 28 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
Nov 03 PHP
php+html5实现无刷新图片上传教程
Jan 22 PHP
PHP内核学习教程之php opcode内核实现
Jan 27 PHP
php格式化时间戳
Dec 17 PHP
PHP对象相关知识总结
Apr 09 PHP
PHP从零开始打造自己的MVC框架之入口文件实现方法详解
Jun 03 PHP
基于laravel belongsTo使用详解
Oct 18 PHP
PHP date_default_timezone_set()设置时区操作实例分析
May 16 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基于cookie与session统计网站访问量并输出显示的方法
2016/01/15 PHP
PHP实现bitmap位图排序与求交集的方法
2016/07/28 PHP
PHP 实现 WebSocket 协议原理与应用详解
2020/04/22 PHP
jquery 双色表格实现代码
2009/12/08 Javascript
jQuery 表单验证扩展(三)
2010/10/20 Javascript
JsDom 编程小结
2011/08/09 Javascript
Java 正则表达式学习总结和一些小例子
2012/09/13 Javascript
原生js和jquery中有关透明度设置的相关问题
2014/01/08 Javascript
jquery实现漫天雪花飞舞的圣诞祝福雪花效果代码分享
2015/08/20 Javascript
页面向下滚动ajax获取数据的实现方法(兼容手机)
2016/05/24 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
Bootstrap实现带动画过渡的弹出框
2016/08/09 Javascript
JavaScript自定义分页样式
2017/01/17 Javascript
react.js 翻页插件实例代码
2017/01/19 Javascript
Vue表单及表单绑定方法
2018/09/04 Javascript
创建echart多个联动的示例代码
2018/11/23 Javascript
layui多iframe页面控制定时器运行的方法
2019/09/05 Javascript
[09:37]DOTA2卡尔工作室 英雄介绍圣堂刺客篇
2013/06/13 DOTA
[52:40]完美世界DOTA2联赛PWL S2 Magma vs GXR 第一场 11.29
2020/12/02 DOTA
Python中的Classes和Metaclasses详解
2015/04/02 Python
Python查找函数f(x)=0根的解决方法
2015/05/07 Python
Django ManyToManyField 跨越中间表查询的方法
2018/12/18 Python
利用Python模拟登录pastebin.com的实现方法
2019/07/12 Python
python多线程实现同时执行两个while循环的操作
2020/05/02 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
Lookfantastic俄罗斯:欧洲在线化妆品零售商
2019/08/06 全球购物
DBA的职责都有哪些
2012/05/16 面试题
OSPF有什么优点?为什么OSPF比RIP收敛快?
2013/02/13 面试题
介绍一下gcc特性
2015/10/31 面试题
工程采购员岗位职责
2014/03/09 职场文书
公司担保书范文
2014/05/21 职场文书
低碳日宣传活动总结
2014/07/09 职场文书
基层党员对照检查材料
2014/08/25 职场文书
2014年计划生育协会工作总结
2014/11/14 职场文书
重阳节慰问信
2015/02/15 职场文书