仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1389|回复: 20
打印 上一主题 下一主题

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

[复制链接]
再见西城 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:40:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
接触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来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
5#
发表于 2015-3-1 09:21:35 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
兰色精灵 该用户已被删除
6#
发表于 2015-3-7 13:00:05 | 只看该作者
微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox  支持的不是很好,所以能少用还是少用的好。
第二个灵魂 该用户已被删除
7#
发表于 2015-3-13 07:06:09 | 只看该作者
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
金色的骷髅 该用户已被删除
8#
发表于 2015-3-20 15:27:57 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
海妖 该用户已被删除
9#
发表于 2015-3-27 17:08:47 | 只看该作者
学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql
蒙在股里 该用户已被删除
10#
发表于 2015-3-28 07:27:15 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
变相怪杰 该用户已被删除
11#
发表于 2015-3-31 18:07:56 | 只看该作者
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
分手快乐 该用户已被删除
12#
发表于 2015-4-2 11:53:29 | 只看该作者
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
不帅 该用户已被删除
13#
发表于 2015-4-5 00:54:10 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
爱飞 该用户已被删除
14#
发表于 2015-4-9 11:55:08 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
精灵巫婆 该用户已被删除
15#
发表于 2015-4-12 03:58:30 | 只看该作者
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
山那边是海 该用户已被删除
16#
发表于 2015-4-12 18:04:22 | 只看该作者
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
灵魂腐蚀 该用户已被删除
17#
发表于 2015-4-14 16:23:05 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
若相依 该用户已被删除
18#
发表于 2015-4-15 04:31:41 | 只看该作者
建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。
深爱那片海 该用户已被删除
19#
发表于 2015-4-16 08:12:17 | 只看该作者
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
柔情似水 该用户已被删除
20#
发表于 2015-5-7 15:50:56 | 只看该作者
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-15 07:49

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表