PHPIni解析类 Beta - PHP修改删除增加配置文件
时间:2009-01-12
来源:互联网
1.实现了与win编程下几乎相同的ini文件操作
2.安全性高,与平时使用的php的数组存取方式一样。不会被下载。
3.以前的config.php都得手工手改。本类实现了对ini文件的读取修改删除等操作。
4.可以使用Section或非Section方式。Section就是对每个属性设计一个块。具体可以参看后面的例子。
5.程序注释清晰易懂,你可以任意修改,例子的说明非常详细。
注:这是个测试版本,可能存在BUG,欢迎大家测试寻找错误。有问题可以留言。
下面是例子和程序,最下面有打包下载。
使用例子:
<?php
/**
* PHPIni解析类详细例子
*/
require_once('PHPIni.class.php');
//------------基础用法(不带Section)--------------
$ini = new PHPIni('config1.ini.php', false); //文件必须为PHP结尾.保证安全性 如果文件不存在就创建
//以非Section方式打开.也就是忽略Section的存在
$ini->setKey('key1', 'value1'); //设置key
$ini->setKey('key2', 'value2');
$ini->saveIniFile(); //设置完要保存ini文件.这步很重要
print_r($ini->getIniArr()); //打印出解析ini文件得到的数组
//这时候你可以打开config1.ini.php看下设置是什么样的,然后执行下面的语句
$ini->setKey('key1', '我是可以key1'); //更改key1的值
$ini->delKey('key2'); //删除key2
$ini->saveIniFile(); //保存文件
print_r($ini->getIniArr()); //打印出解析ini文件得到的数组
unset($ini);
//------------end 基础用法(不带Section)--------------
//------------中级用法(带Section)------------------
$ini = new PHPIni('config2.ini.php'); //使用默认方式(Section方式)打开文件
//注:在Section模式下.每个键值都必须依附于一个Section.
$ini->addSection('section1'); //如果一个Section都没有就必须设置一个
$ini->setKey('key1', 'value1', 'section1'); //为Section1设置一个值
$ini->addSection('section2', array('key1' => 'value1')); //直接为Section设置值 和上面的效果相同
$ini->setKey('key2', 'value2'); //Section为空.就在最后一个Section后增加值.当前就是在Section2后加入
$ini->saveIniFile(); //保存文件
print_r($ini->getIniArr()); //打印出解析ini文件得到的数组
$ini->delSection('section1'); //删除Section 注意下面的所有键值都会被删除
$ini->saveIniFile(); //保存文件
print_r($ini->getIniArr()); //打印出解析ini文件得到的数组
unset($ini);
//------------end 中级用法(带Section)------------------
//------------高级用法(通过数组设置ini)------------------
$ini = new PHPIni('config3.ini.php');
$iniArr = array(
'section1' => array(
'key1' => 'value1',
'key2' => 'value2',
),
'section2' => array(
'key1' => 'value1',
'key2' => 'value2',
),
);
$ini->setIniArr($iniArr);
$ini->saveIniFile(); //把数组保存到Ini文件
//下面的方法也可以
$ini->setIniFile($iniArr); //这个方法也可以.跟上面两句话等价.
//------------end 高级用法(通过数组设置ini)------------------
[php]
<?php
/**
* PHPIni解析类 Beta - PHP修改删除增加配置文件
*
* @author Jessica
* @link www.skiyo.cn
* @version 1.0.0
*
*/
class PHPIni {
/**
* Ini文件的数组形式
*
* @var array
*/
private $iniArr = array();
/**
* Ini文件路径
*
* @var string
*/
private $iniFile = '';
/**
* 是否以Section方式打开ini文件
*
* @var boolean
*/
private $isSection = true;
/**
* 构造函数
* $iniFile表示文件路径.若不存在就自动创建
* $isSection表示是否以Section方式打开ini文件
*
* @param string $iniFile
* @param boolean $isSection
* @access public
*/
public function __construct($iniFile, $isSection = true) {
$this->iniFile = $iniFile;
$this->isSection = $isSection;
if (empty($this->iniArr)) {
$this->parseIni();
}
}
/**
* 解析ini文件到数组
*
* @access public
* @return void
*/
private function parseIni() {
if (empty($this->iniFile) || !is_file($this->iniFile)) {
if (!$this->createIniFile()) {
$this->throwException('无法创建Ini文件!');
}
}
$this->iniArr = parse_ini_file($this->iniFile, $this->isSection);
}
/**
* 获取解析到的数组
*
* @return array
* @access public
*/
public function getIniArr() {
return $this->iniArr;
}
/**
* 创建Ini文件
*
* @return boolean
* @access private
*/
private function createIniFile() {
if (touch($this->iniFile)) {
return true;
} else {
return false;
}
}
/**
* 添加或者修改一个config
* 如果存在就更改以前的设置.如果不存在就添加ini设置
* 如果$section为空就在最后添加设置,如果不为空就在指定的$section添加设置
*
* @param string $key
* @param mixed $value
* @param string $section
* @access public
* @return void
*/
public function setKey($key, $value, $section = '') {
//如果$section为空就在最后添加设置
if (empty($section)) {
if ($this->isSection) {
//将数组指针移动到最后
end($this->iniArr);
//在数组的最后插入元素
if (empty($this->iniArr[key($this->iniArr)])) {
$this->throwException('没有任何Section,请先添加Section');
}
$this->iniArr[key($this->iniArr)][$key] = $value;
} else {
$this->iniArr[$key] = $value;
}
} else {
//$section就按照$section添加设置
if ($this->isSection) {
$this->iniArr[$section][$key] = $value;
} else {
$this->iniArr[$key] = $value;
}
}
}
/**
* 增加一个Section,其内容为数组
*
* @param string $section
* @param array $value
*/
public function addSection($section, $value = array()) {
if (!$this->isSection) {
$this->throwException('无法在非Section模式下增加Section!');
} else {
if (array_key_exists($section, $this->iniArr)) {
$this->throwException('无法增加Section,已经存在相同的Section!');
} else {
if (is_array($value)) {
$this->iniArr[$section] = $value;
} else {
$this->throwException('Section的值必须是数组!');
}
}
}
}
/**
* 手工设置ini的参数.
*
* @param array $iniArr
* @access public
*/
public function setIniArr($iniArr) {
$this->iniArr = $iniArr;
}
/**
* 删除一个Section
*
* @param string $section
*/
public function delSection($section) {
if ($this->isSection) {
if (array_key_exists($section, $this->iniArr)) {
unset($this->iniArr[$section]);
return true;
} else {
return false;
}
} else {
return false;
}
}
/**
* 删除一个config
* 如果$section为空就在最后一个Section删除对应的Key
*
* @param string $key
* @param string $section
*/
public function delKey($key, $section = '') {
if (empty($section)) {
if ($this->isSection) {
end($this->iniArr);
if (array_key_exists($key, $this->iniArr[key($this->iniArr)])) {
unset($this->iniArr[key($this->iniArr)][$key]);
} else {
return false;
}
} else {
if (array_key_exists($key, $this->iniArr)) {
unset($this->iniArr[$key]);
} else {
return false;
}
}
} else {
//$section就按照$section添加设置
if ($this->isSection) {
if (array_key_exists($key, $this->iniArr[$section])) {
unset($this->iniArr[$section][$key]);
} else {
return false;
}
} else {
if (array_key_exists($key, $this->iniArr)) {
unset($this->iniArr[$key]);
} else {
return false;
}
}
}
return true;
}
/**
* 删除数组中相同的元素.(只搜索第一层键值)
*
* @param array $array
* @return array
* @access private
*/
private function removeSameArrKey($array) {
foreach ($array as $key => $value) {
$keyArr[] = $key;
}
$keyArr = array_unique($keyArr);
foreach ($array as $key1 => $value) {
foreach ($keyArr as $key2) {
if ($key2 == $key1) {
$return[$key2] = $value;
}
}
}
return $return;
}
/**
* 根据数组保存ini文件
* 注:如果$iniArr为空默认使用事先读到的数组
*
* @param array $iniArr
* @return boolean
* @access public
*/
public function setIniFile($iniArr = array()) {
if (empty($this->iniFile) || !is_file($this->iniFile)) {
$this->throwException('没有找到ini文件!');
} else {
//判断参数
if (empty($iniArr)) {
if (empty($this->iniArr)) {
$this->throwException('没有任何可以读取的设置!请先解析Ini');
} else {
$iniArr = $this->iniArr;
}
}
//生成Ini
$iniArr = $this->removeSameArrKey($iniArr);
foreach($iniArr as $key => $item) {
//由于只会有一层Section.所以不必递归
//Section
if(is_array($item)) {
$item = array_unique($item);
$content .= "\n[{$key}]\n";
foreach ($item as $key2 => $item2) {
if(is_numeric($item2) || is_bool($item2)) {
$content .= "{$key2} = {$item2}\n";
} else{
$content .= "{$key2} = \"{$item2}\"\n";
}
}
} else {
if(is_numeric($item) || is_bool($item)) {
$content .= "{$key} = {$item}\n";
} else {
$content .= "{$key} = \"{$item}\"\n";
}
}
}
//保证安全性
$content = "<?php \n".$content."?>";
//写入文件
if(!$handle = fopen($this->iniFile, 'w')) {
return false;
}
if (flock($handle, LOCK_EX)) {
if(!fwrite($handle, $content)) {
return false;
}
flock($handle, LOCK_UN); // 释放锁定
fclose($handle);
return true;
} else {
$this->throwException('无法锁定ini文件'.$this->iniFile);
}
}
}
/**
* 保存ini文件
*
* @return boolean
* @access public
*/
public function saveIniFile() {
if ($this->setIniFile()) {
return true;
} else {
return false;
}
}
/**
* 抛出一异常信息
*
* @param string $message
* @return void
* @access protected
*/
protected function throwException($message) {
throw new Exception($message);
}
}
[/php]
转载请注明出处:http://www.skiyo.cn

PHPIni.class.rar (3.02 KB)
作者: TankMe 发布时间: 2009-01-12
还不知道怎么用
接口什么的,什么**类,abstract是什么类?
用的上不?
作者: wodoe 发布时间: 2009-01-13
作者: shanji 发布时间: 2009-01-13
作者: Deman 发布时间: 2009-01-13
作者: lanye 发布时间: 2009-01-13

作者: aqua 发布时间: 2009-01-13
作者: xiejohnson 发布时间: 2009-01-21
作者: 纯纯猪猪 发布时间: 2009-01-30
作者: e_zailai 发布时间: 2009-05-14
多谢版主嘞!
大力支持!
这下要好好学习咯!
呵呵,支持起!
调节阀(controlvalve)用于调节介质的流量、压力和调节阀液位。根据调节部位信号,自动控制阀门的开度,从而蒸汽电磁阀达到介质流量、压力和液位的调节。调节阀分电动调节阀、气动调节阀和液动调节阀等。
调节阀由电动执行机构或气动执行机构和调节阀两部分组成。调节并通常分为直通单座式和直通双座式两种,后者具有电动调节阀流通能力大、不平衡办小和操作稳定的特点,所以通常特别适用于大流量、高压降和泄漏少的场合。
流通能力Cv是选择调节阀的家用净水器主要参数之一,调节阀的流通能力的定义为:当调节阀全开时,阀两端压差为0.1MPa,流体密度为1g/cm3时,每小时流径调节阀的流量数,称为流通能力,也称翅片管流量系数,以Cv表示,单位为t/h,液体的Cv值按下式计算。
根据流通能力Cv值大小查表,就可以确定坡口机调节阀的公称通径DN。
调节阀的流量特性,是在阀两端压差保持恒定的条件下,介质仓库管理流经调节阀的相对流量与它的开度之间关系。调节阀的流量特性有线性特性,等百分比特性及抛物线特性三种。
作者: top-xiami 发布时间: 2009-05-16
作者: e_zailai 发布时间: 2009-09-10
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28