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.pswp.cn/news/532317.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532317.shtml
英文地址,請注明出處:http://en.pswp.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;數字電視廣播、移動視頻點播等對數據吞吐量要求很高的業務逐漸變得可能。為了在有限的帶寬內用有限的發射功率保證信息在空間傳播…