查看電腦設定軟體 php INI設定檔的解析實作分析

WBOY
發布: 2016-07-29 08:44:10
原創
1154 人瀏覽過

所以看到這篇文章的時候,我也才剛知道,原來,還有一個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
class DbaReader implements Iterator 🎜>{
protected $db = NULL;
private $key = false;
private $val = false;
/**
* 使用 $handler 以唯讀模式開啟資料庫 $file。
*
* @param file 要開啟的資料庫檔案。
* @param handler 用於資料庫存取的處理程序。
*/
function __construct($file, $handler) {
if (!$this->db = dba_open($file, 'r', $handler)) {
throw new exception('Could not open file ' . $file);
}
}
/**
* 關閉資料庫。
*/
function __destruct() {
dba_close($this->db);
}
/**
* 快退到第一個元素。
*/
function rewind() {
$this->key = dba_firstkey($this->db);
$this->fetch_data();
}
/**
* 移至下一個元素。
*
* @return void
*/
function next() {
$this->key = dba_nextkey($this->db);
$this->fetch_data();
}
/** *
* 如果 $key 有效,則取得目前資料
*/
private function fetch_data() {
if ($this->key !== false) {
$this->val = dba_fetch($this->key, $this ->db);
}
}
/**
* @return 目前資料。
*/
function current() {
return $this->val;
}
/ **
* @return 是否有更多元素可用。
*/
function valid() {
if ($this->db && $this->key !== false) {
return true;
} else {
return false;
}
}
/**
* @return 目前金鑰。
*/
function key() {
return $this->key;
}
}
?>



DbaReader使用Iterator接口,當然要實現裡面的5個迭代方法。迭代方法對handlerhandlerINI檔的解析,用到了dba擴充。
說點題外話,什麼是Dba?為什麼要使用Dba?
Dba是一款資料庫,確切地說,是一款索引化的檔案儲存系統。適合相對比較靜態的索引化的資料儲存。所有版本的Linux都會帶此資料庫。
既然使用檔案來儲存數據,為什麼還有使用Dba呢?原因有二:
1資料記錄的儲存長度可以不是固定的;
2使用索引儲存和檢索資料。
DbaReader提供一個存取INI檔案資料的迭代方法,如果需要儲存刪除資料呢?所以DbaArray在繼承DbaReader的基礎上,實作了這個功能。

複製程式碼

程式碼如下:


class DbaArray 擴充DbaReader 實作ArrayAccess
{
/**
* 使用 $handler 以唯讀模式開啟資料庫 $file。
*
* @param file 要開啟的資料庫檔案。
* @param handler 用於資料庫存取的處理程序。取值http://www.php.net/manual/en/dba.requirements.php
*/
function __construct($file, $handler)
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
{
> 🎜>$this->db = dba_popen($file, "c", $handler);
if (!$this->db) {
拋出新例外("資料庫無法開啟");
}
}
/**
* 關閉資料庫。
*/
函數__destruct()
{
parent::__destruct();
}
/**
* 閱讀條目。
*
* @param $name 鍵讀取
* @return 與 $name
相關的值*/
function offsetGet($name)
{
$data = dba_fetch($name, $this->db);
if($data) {
if ( ini_get('magic_quotes_runtime')) {
$data = stripslashes($data);
}
//傳回反序列化($data);
回傳$資料;
}
否則
{
回傳NULL;
}
}
/**
* 設定一個條目。
*
* @param $name 要寫入的鍵
* @param $value 要寫入的值
*/
function offsetSet($name, $value)
{
{
//dba_replace($name, serialize($value) , $this->db);

dba_replace($name, $value, $this->db);
傳回$值;
}
/**

* @return key $name 是否存在。 */ function offsetExists($name) { return dba_exists($name, $this->db);

}

/**
* 刪除鍵/值對。
*
* @param $name 要刪除的鍵。
*/

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

} } ? >

使用範例

建立檔案text.ini,內容如下:



複製程式碼

程式碼如下:


host = localhost
password = 密碼
database = data


檔index.php.代碼如下:

檔複製程式碼

程式碼如下:function loadClass($class) { require_once __DIR__.DIRECTORTOR_PARATOR.Yclass. '; } spl_autoload_register('loadClass',false); $iniFile = __DIR__.DIRECTORY_SEPARATOR.'test.ini'; $ini = new DbaArray($iniFile,'File'ini'; $ini = new DbaArray($iniFile,'File') ; echo $ini['database']; var_dump($ini); ? > --EOF-- 看完上面這一段,是不是有什麼想法?原來ini的操作也是這麼方便?不過,如果是純讀取的話,我還是比較比較於推薦parse_ini_file之類的(突然忘記了,如果編碼不一樣怎麼辦?ansi/utf-8,這真是一個永恆的痛。) 以上就介紹了查看電腦設定軟體php INI設定檔的解析實作分析,包括了查看電腦設定軟體方面的內容,希望對PHP教學有興趣的朋友有所幫助。
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板