ホームページ  >  記事  >  バックエンド開発  >  php INI設定ファイルの解析と実装_PHPチュートリアル

php INI設定ファイルの解析と実装_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:32:57999ブラウズ

それで、この記事を読んで、別の dba 関数が使用できることを知りました。 さて、dba 関数のインストールを詳しく調べたところ、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 などの製品には設定ファイルが不可欠です。もちろん、顧客ごとに 1 つのセットを開発する必要はありません。さまざまな構成ファイルの。私はかつて、構成ファイルの作成に適した 4 つの主要なカテゴリがあると述べました。それは、PHP 配列 (ほとんどの他の構成メソッドは最終的に PHP 配列に解析されます)、XML、YAML、および INI です。今日は INI ファイルについてのみ説明します。 ZendFramework はこの構成を使用します。

DbaReader クラスを見てみましょう。ファイル名は DbaReader.php です:

コードをコピーします コードは次のとおりです:

class DbaReaderimplements 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)) {
新しい例外をスロー('ファイルを開けませんでした ' . $file);
}
}

/**
* データベースを閉じます。
*/
function __destruct() {
dba_close($this->db );
}
/**
* 最初の要素に巻き戻します。
*/
関数 rewind() {
$this->key = dba_firstkey($this->db);
$this->fetch_data();

/**
* 次の要素に移動します。
*
* @return void
*/
function next() {
$this->key = dba_nextkey($this->db)
}

/* *
* $key が有効な場合、現在のデータを取得します
* /
プライベート関数 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 現在のキー。
*/
関数key() {
return $this->key;
}
}
?>


DbaReader は Iterator インターフェイスを使用し、もちろん内部に 5 つの反復メソッドを実装する必要があります。反復方法では、dba 拡張機能を使用して handlerhandlerINI ファイルを解析します。

少し話がそれましたが、Dba とは何ですか?なぜ DBA を使用するのですか?
Dba はデータベースであり、正確には、インデックス付きファイル ストレージ システムです。比較的静的なインデックス付きデータ ストレージに適しています。 Linux のすべてのバージョンには、このデータベースが付属しています。
ファイルはデータの保存に使用されるのに、なぜ依然として DBA を使用するのでしょうか?理由は 2 つあります。
1 データ レコードの保存長が固定されていない可能性があります。
2 データの保存と取得にイ​​ンデックスを使用します。

DbaReader は、INI ファイル データにアクセスするための反復的な方法を提供します。削除されたデータを保存する必要がある場合はどうすればよいですか?したがって、DbaArray は DbaReader を継承してこの関数を実装します。



コードをコピーします
コードは次のとおりです:

class DbaArray extends DbaReaderimplements 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) {
新しい例外をスロー("データベースを開けませんでした");
}
}

/**
* データベースを閉じます。
*/
function __destruct()
{
parent::__destruct();
}

/**
* エントリーを読んでください。
*
* @param $name から読み取るキー
* $name に関連付けられた @戻り値
*/
function offsetGet($name)
{
$data = dba_fetch($name, $this->db);
if($data) {
if (ini_get('magic_quotes_runtime')) {
$data = ストリップスラッシュ($data);
}
//return unserialize($data);
$data を返す;
}
else
{
NULL を返す;
}
}

/**
* エントリを設定します。
*
* @param $name 書き込むキー
* @param $value 書き込む値
*/
function offsetSet($name, $value)
{
//dba_replace($name, Serialize($value), $this->db);
dba_replace($name, $value, $this->db);
$value を返します;
}

/**
* @return キー $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__.DIRECTORY_SEPARATOR.$class.'.php';
}
spl_autoload_register('loadClass',false);

$iniFile = __DIR__.DIRECTORY_SEPARATOR.'test.ini';

$ini = 新しい DbaArray($iniFile,'iniFile');
echo $ini['データベース'];
var_dump($ini);
?>

--EOF--

この段は完了しました、これは何か特別な方法ではありませんか?突然忘れていましたが、ansi/utf-8 がコード化されている場合、これは永続的な痛みです。)

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/322682.html技術記事この篇の文章を見たとき、私もまた知っています、原来、また dba の関数が使用可能です、嗯、仔细は下にある dba この関数のインストールを確認しました、inifile をサポートしています...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。