それで、この記事を読んで、別の 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)
}
/**
* 次の要素に移動します。
*
* @return void
*/
関数 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 現在のキー。
*/
function key() {
return $this- >key;
}
}
?>
DbaReader は Iterator インターフェイスを使用し、もちろん内部に 5 つの反復メソッドを実装する必要があります。反復方法では、dba 拡張機能を使用して handlerhandlerINI ファイルを解析します。
少し話がそれましたが、Dba とは何ですか?なぜ DBA を使用するのですか?
コードは次のとおりです: 复制帽代码如下: 代码如下:function loadClass($class) {
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.代码如下:
复制代码
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--
この部分は完了しました、これは何かあるのではありませんか?元来iniの操作もこの方便ですか?忘れていましたが、ansi/utf-8 がコード化されている場合、これは永続的な問題です。)