日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php.ini配置详解 号,php INI配置文件的解析实现分析

發(fā)布時間:2025/3/8 php 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php.ini配置详解 号,php INI配置文件的解析实现分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我不知道怎么說才好,因為我在讀INI文件的時候,往往都是用現(xiàn)成的函數(shù):parse_ini_file或者是parse_ini_string,但怎么寫入,就是另外的方法了(自己實現(xiàn)。。。。)

所以看到這篇文章的時候,我也才剛剛知道,原來,還有一個dba的函數(shù)可以用,嗯,仔細看了一下dba這個函數(shù)的installtion,發(fā)現(xiàn)支持inifile也是從PHP5才開始實現(xiàn)的。好吧,相應(yīng)的dba相關(guān)的可以看看這里: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/。

曾經(jīng)介紹過SPL的各類型接口和迭代器。今天,在瀏覽PHP源碼目錄時,發(fā)現(xiàn)有個解析INI文件的例子,覺得不錯,于是整理了一個實例,拿來分享下。

在PHP應(yīng)用程序中,配置文件不可或缺,特別是商城,CMS之類的產(chǎn)品,不同的客戶需求不同,當然,不會每個客戶開發(fā)一套程序,好辦法的是每個客戶 有一套不同的配置文件。適合做配置文件的我曾經(jīng)也說過,主要有四類:PHP數(shù)組(幾乎其他的配置方法最終都是解析成為PHP數(shù)組),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接口,當然要實現(xiàn)里面的5個迭代方法。迭代方法對handlerhandlerINI文件的解析,用到了dba擴展。

說點題外話,什么是Dba?為什么使用Dba?

Dba是一款數(shù)據(jù)庫,確切點說,是一款索引化的文件存儲系統(tǒng)。適合相對比較靜態(tài)的索引化的數(shù)據(jù)存儲。所有版本的Linux都會帶此數(shù)據(jù)庫。

既然使用文件來存儲數(shù)據(jù),為什么還有使用Dba呢?原因有二:

1數(shù)據(jù)記錄的存儲長度可以不是固定的;

2使用索引存儲和檢索數(shù)據(jù)。

DbaReader提供一個訪問INI文件數(shù)據(jù)的迭代方法,如果需要存儲刪除數(shù)據(jù)呢?所以DbaArray在繼承DbaReader的基礎(chǔ)上,實現(xiàn)了此功能。

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);

}

}

?>

使用范例

構(gòu)建文件text.ini,內(nèi)容如下:

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,這真是一個永恒的痛。)

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的php.ini配置详解 号,php INI配置文件的解析实现分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。