php.ini配置详解 号,php INI配置文件的解析实现分析

我不知道怎么说才好,因为我在读INI文件的时候,往往都是用现成的函数:parse_ini_file或者是parse_ini_string,但怎么写入,就是另外的方法了(自己实现。。。。)

所以看到这篇文章的时候,我也才刚刚知道,原来,还有一个dba的函数可以用,嗯,仔细看了一下dba这个函数的installtion,发现支持inifile也是从PHP5才开始实现的。好吧,相应的dba相关的可以看看这里:http://www.php.net/manual/en/dba.installation.php,详细的还是看这里吧:http://www.php.net/manual/en/book.dba.php

OK,上原文,它来自于:http://www.cardii.net/php-spl-parse-ini-file/。

曾经介绍过SPL的各类型接口和迭代器。今天,在浏览PHP源码目录时,发现有个解析INI文件的例子,觉得不错,于是整理了一个实例,拿来分享下。

在PHP应用程序中,配置文件不可或缺,特别是商城,CMS之类的产品,不同的客户需求不同,当然,不会每个客户开发一套程序,好办法的是每个客户 有一套不同的配置文件。适合做配置文件的我曾经也说过,主要有四类:PHP数组(几乎其他的配置方法最终都是解析成为PHP数组),XML,YAML和 INI。今天只讲INI文件。ZendFramework使用此配置。

下看个DbaReader类。文件名为 DbaReader.php:

class DbaReader implements Iterator

{

protected $db = NULL;

private $key = false;

private $val = false;

/**

* Open database $file with $handler in read only mode.

*

* @param file Database file to open.

* @param handler Handler to use for database access.

*/

function __construct($file, $handler) {

if (!$this->db = dba_open($file, 'r', $handler)) {

throw new exception('Could not open file ' . $file);

}

}

/**

* Close database.

*/

function __destruct() {

dba_close($this->db);

}

/**

* Rewind to first element.

*/

function rewind() {

$this->key = dba_firstkey($this->db);

$this->fetch_data();

}

/**

* Move to next element.

*

* @return void

*/

function next() {

$this->key = dba_nextkey($this->db);

$this->fetch_data();

}

/**

* Fetches the current data if $key is valid

*/

private function fetch_data() {

if ($this->key !== false) {

$this->val = dba_fetch($this->key, $this->db);

}

}

/**

* @return Current data.

*/

function current() {

return $this->val;

}

/**

* @return Whether more elements are available.

*/

function valid() {

if ($this->db && $this->key !== false) {

return true;

} else {

return false;

}

}

/**

* @return Current key.

*/

function key() {

return $this->key;

}

}

?>

DbaReader使用Iterator接口,当然要实现里面的5个迭代方法。迭代方法对handlerhandlerINI文件的解析,用到了dba扩展。

说点题外话,什么是Dba?为什么使用Dba?

Dba是一款数据库,确切点说,是一款索引化的文件存储系统。适合相对比较静态的索引化的数据存储。所有版本的Linux都会带此数据库。

既然使用文件来存储数据,为什么还有使用Dba呢?原因有二:

1数据记录的存储长度可以不是固定的;

2使用索引存储和检索数据。

DbaReader提供一个访问INI文件数据的迭代方法,如果需要存储删除数据呢?所以DbaArray在继承DbaReader的基础上,实现了此功能。

class DbaArray extends DbaReader implements ArrayAccess

{

/**

* Open database $file with $handler in read only mode.

*

* @param file Database file to open.

* @param handler Handler to use for database access.取值http://www.php.net/manual/en/dba.requirements.php

*/

function __construct($file, $handler)

{

$this->db = dba_popen($file, "c", $handler);

if (!$this->db) {

throw new exception("Databse could not be opened");

}

}

/**

* Close database.

*/

function __destruct()

{

parent::__destruct();

}

/**

* Read an entry.

*

* @param $name key to read from

* @return value associated with $name

*/

function offsetGet($name)

{

$data = dba_fetch($name, $this->db);

if($data) {

if (ini_get('magic_quotes_runtime')) {

$data = stripslashes($data);

}

//return unserialize($data);

return $data;

}

else

{

return NULL;

}

}

/**

* Set an entry.

*

* @param $name key to write to

* @param $value value to write

*/

function offsetSet($name, $value)

{

//dba_replace($name, serialize($value), $this->db);

dba_replace($name, $value, $this->db);

return $value;

}

/**

* @return whether key $name exists.

*/

function offsetExists($name)

{

return dba_exists($name, $this->db);

}

/**

* Delete a key/value pair.

*

* @param $name key to delete.

*/

function offsetUnset($name)

{

return dba_delete($name, $this->db);

}

}

?>

使用范例

构建文件text.ini,内容如下:

host = localhost

password = password

database = data

文件index.php.代码如下:

function loadClass($class)

{

require_once __DIR__.DIRECTORY_SEPARATOR.$class.'.php';

}

spl_autoload_register('loadClass',false);

$iniFile = __DIR__.DIRECTORY_SEPARATOR.'test.ini';

$ini = new DbaArray($iniFile,'iniFile');

echo $ini['database'];

var_dump($ini);

?>

--EOF--

看完上面这一段,是不是有什么想法?原来ini的操作也是这么的方便?不过,如果是纯读取的话,我还是比较推荐于parse_ini_file之类的(突然间忘了,如果编码不一样怎么办?ansi/utf-8,这真是一个永恒的痛。)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532317.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c iostream.源码_通达信指标公式源码精准买卖主图指标公式免费分享

V0:EMA(C,5),COLOR00FF66;V1:EMA(C,10),COLOR00FF66;V2:EMA(C,15),LINETHICK2,COLORFFFFFF;V3:EMA(C,30);V4:EMA(C,60),COLOR3366FF;年线:EMA(C,90),COLORBLUE;M1:1000*V1/V4<1015 AND 1000*V1/V4>975;M2:1000*V2/V4<1020 AND 1000*V2/V4>980;M3:1000*V3/V4<101…

4am永远 鼠标按键设置_4AM称霸PCL和PEL 绝地求生与和平精英的双端冠军 | 电玩巴士...

在《绝地求生》PCL秋季赛&#xff0c;4AM高分碾压全场斩获冠军&#xff1b;在手游和平精英PEL联赛上4AM战队再度重拳出击荣获S3总冠军。在同一时间&#xff0c;4AM战队实现了端游与手游双冠王的神迹&#xff01;要说国内第一大逃杀电竞俱乐部&#xff0c;4am自认第二&#xff0…

checkA.php,php window平台模拟checkdnsrr函数检测_php

在php的系统函数中有一个checkdnsrr函数&#xff0c;该函数的作用是根据一个给定的host name(域名)或者IP地址检查它是否有DNS记录&#xff0c;目的就是检验它是否真实存在。但是该函数仅可以在linux系统下使用&#xff0c;并不支持windows平台。下面是网上搜集到的一个hack的方…

oracle临时表经常被锁_【赵强老师】Oracle数据库的存储结构

Oracle的存储结构分为&#xff1a;物理存储结构和逻辑存储结构。一、物理存储结构&#xff1a;指硬盘上存在的文件数据文件(data file)一个数据库可以由多个数据文件组成的&#xff0c;数据文件是真正存放数据库数据的。一个数据文件就是一个操作系统文件。数据库的对象(表和索…

php页面的循环输出数组,PHP抓取页面上的数组 并循环输出 急

PHP抓取页面上的数组 并循环输出 急 在线等我用file_get_contents()抓取了 这个网址上的内容http://simonfenci.sinaapp.com/index.php?keysimon&wd1314abc看似好像反回的是数组。。但是我不管怎么用foreach循环都报错。。我只想把数组中的word里面的值 取出来。。谁帮帮我…

h5 nan_手把手教你将H5游戏打包成快游戏

H5游戏可以通过快应用的web组件快速打包成快游戏&#xff0c;打包上架后的快游戏&#xff0c;只要原H5游戏的url不发生变动&#xff0c;快游戏就不需要做更新&#xff0c;维护工作量小。使用快应用IDE&#xff0c;打包快游戏的操作很简单。访问官网安装开发工具&#xff0c;在P…

php 构造函数 返回值,php构造函数与析构函数实例分析

本节内容&#xff1a;php构造函数与析构函数例子&#xff1a;复制代码 代码示例:class Person{public $name;public $age;public function __construct($name,$age){$this->name $name;$this->age $age;}function __destruct(){echo $this->name."销毁资源&…

平板电脑有什么用_除了盖泡面,平板电脑没什么用了

平板电脑似乎变成一个鸡肋&#xff0c;逐渐没有多少人买了。就算拥有&#xff0c;抱在怀里把玩的机会少了&#xff0c;躺在角落吃灰的时候多了。曾经&#xff0c;没有人能拒绝平板电脑的诱惑。有了平板&#xff0c;你仿佛跻身上流社会。不经意间拿出时的从容&#xff0c;打开皮…

java程序面向对象show,20165309 实验二 Java面向对象程序设计

2017-2018-2 20165309实验二《Java面向对象程序设计》实验报告一、实验内容1. 初步掌握单元测试和TDD2. 理解并掌握面向对象三要素&#xff1a;封装、继承、多态3. 初步掌握UML建模4. 熟悉S.O.L.I.D原则5. 了解设计模式二、实验步骤(一)单元测试1.三种代码&#xff1a;伪代码、…

php dom 丢失内容,PHP DOMDocument缺失

我在运行$dom new DOMDocument(“1.0”,“utf-8”)时遇到一个奇怪的错误&#xff1a;警告&#xff1a;require_once(classes / DOMDocument.class.php)[function.require-once]&#xff1a;无法打开流&#xff1a;第5行的/var/www/html/cms/bootstrap.php中没有这样的文件或目…

jade软件_TEM衍射斑点标定之DM软件

虽然透射电子显微镜(TEM) 能在纳米尺度上实现对待测样品形貌、 尺寸的分析&#xff1b; 结合选区电子衍射(SAED)&#xff0c;可以更进一步实现对待测样品的晶体结构、 晶相组成的鉴定&#xff0c;从而提高样品分析的准确度和可靠性。可是&#xff0c;每个刚接触TEM的小白&#…

dorado 7 怎么样_一点点奶茶怎么样?消费者眼中的网红奶茶

最近在朋友圈, -款奶茶火速蹿红,不错,那正是近期疯传的网红奶茶一点点奶茶。一点点奶茶是-款主打台湾正宗波霸奶茶的茶饮品牌,而这样的奶茶在现在的市场中就表现的十分有潜力, 尤其受年轻群体的喜欢!一点点奶茶怎么样?它的崛起是无可厚非的,它那美丽的外形,别具-格的属性&…

Mysql 启动失败没日志,MySQL Server 5.7将无法启动,并且未填充错误日志

我最近在Ubuntu 14.04上安装了MySQL Server 5.7(通过ansible使用this role是具体的).首次安装时启动很好,但是当我尝试重新启动它时,它会永远挂起&#xff1a;sudo service mysql restart* Stopping MySQL Community Server 5.7.13* MySQL Community Server 5.7.13 is already …

gatewayproperties 是空_杨丞琳演唱会踩空,从二楼高台掉到一楼,手脚擦伤,引发网友热议...

11月6日&#xff0c;据台湾媒体报道&#xff0c;杨丞琳今晚在台北举办连续三天的演唱会&#xff0c;她开场在两层楼高的高台上唱歌&#xff0c;结束后意外从高台踩空掉到一楼&#xff0c;从二楼高台掉到一楼&#xff0c;手脚擦伤。引发网友们的热议。当时幸好身边有工作人员抱住…

0 179 90 150matlab,matlab成功的函数拟合方法_更新中

学习心得一维插值方案 (1)二维数据内插值(表格查找) (3)等高线 (4)三维曲面 (5)等高线2 (6)三维曲面2 (7)matlab绘制温度场(尚未深入研究) (12)二维曲线(非线性)拟合步骤 (17)三维曲线(非线性)拟合步骤 (18)三维曲线的画法 (19)三维曲面的画法 (20)一维插值方案clearyear 1900…

matlab中 %s 是什么意思,ie在matlab中是什么意思

MATLAB文件操作相关命令5&#xff0e;2&#xff0e;4 输入输出语句 (1) 实时交互输入输出 input&#xff1b;keyboard (2) 完全复制式的文件存取 *1) save save save 文件名 x save 文件名 x y z save 文件名 x y z –ascii save 文件名 x y z –ascii –double save 文件名 x …

mysql with as 用法_英语语法丨英语中just的用法总结,你掌握了吗?

just在英语中是一个重要的单词&#xff0c;它的使用方法很多样。今天&#xff0c;这篇文章可以帮你正确使用这个英语中的关键词&#xff01;一、just作为时间表达1.Just Recently最近just常被用来表达&#xff0c;某事最近发生了。在现在完成时中&#xff0c;just可以用来表示…

检测php加密方式,一种php加密方式

function RandAbc($length""){//返回随机字符串$str"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";return str_shuffle($str);}$filenamedam.php;$T_k1RandAbc();//随机密匙1$T_k2RandAbc();//随机密匙2$vstrfile_get_contents($filename);//要…

easyx 备忘录_报到?上课?我被自己的备忘录骗到了

2020年6月的某一天小莔被一股神秘力量支配打开了手机里的备忘录突然发现了自己曾经记录下的一则消息小莔现在看到真的是回忆满满从一月到现在我们经历了许多变数看到了世间的温暖感受到了爱与希望其中遇到的一些感动我们可能会忘记就像我们成长的过程中也会经历很多要做许多事情…

基于matlab的ldpc编码的构造,基于LDPC编码的GMSK调制与解调及matlab仿真实现(含录像)...

基于LDPC编码的GMSK调制与解调及matlab仿真实现(含录像)(开题报告,论文10700字,程序代码,录像)摘 要随着无线通信技术的不断发展与进步&#xff0c;数字电视广播、移动视频点播等对数据吞吐量要求很高的业务逐渐变得可能。为了在有限的带宽内用有限的发射功率保证信息在空间传播…