再见西城 发表于 2015-2-3 23:40:36

PHP网页编程之php INI设置装备摆设文件的解析完成剖析

接触MYSQL,开始设计数据库程序   所以看到这篇文章的时分,我也才方才晓得,本来,还有一个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:
复制代码 代码以下:
<?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的基本上,完成了此功效。
复制代码 代码以下:
<?php
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.代码以下:
复制代码 代码以下:
<?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,这真是一个永久的痛。)告诉你了一个方式,但是缺少努力这一环节,那也是白搭。

再现理想 发表于 2015-2-4 05:46:16

Ps:以上纯属原创,如有雷同,纯属巧合

小魔女 发表于 2015-2-4 21:09:46

装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。

透明 发表于 2015-2-10 11:01:58

你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。

仓酷云 发表于 2015-3-1 09:21:35

遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。

兰色精灵 发表于 2015-3-7 13:00:05

微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。

第二个灵魂 发表于 2015-3-13 07:06:09

找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。

金色的骷髅 发表于 2015-3-20 15:27:57

写的比较杂,因为我也是个新手,不当至于大家多多指正。

海妖 发表于 2015-3-27 17:08:47

学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql

蒙在股里 发表于 2015-3-28 07:27:15

作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。

变相怪杰 发表于 2015-3-31 18:07:56

我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:

分手快乐 发表于 2015-4-2 11:53:29

这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己

不帅 发表于 2015-4-5 00:54:10

写的比较杂,因为我也是个新手,不当至于大家多多指正。

爱飞 发表于 2015-4-9 11:55:08

其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。

精灵巫婆 发表于 2015-4-12 03:58:30

对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。

山那边是海 发表于 2015-4-12 18:04:22

至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。

灵魂腐蚀 发表于 2015-4-14 16:23:05

如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,

若相依 发表于 2015-4-15 04:31:41

建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。

深爱那片海 发表于 2015-4-16 08:12:17

php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。

柔情似水 发表于 2015-5-7 15:50:56

php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
页: [1] 2
查看完整版本: PHP网页编程之php INI设置装备摆设文件的解析完成剖析