私は開発中の小さなアプリケーションを持っており、それを他の人に提供/販売したいと思うかもしれません。いくつかの設定を保持し、それらを変更するための管理インターフェイスを作成したいと考えています。それらを保管する最良の方法は何ですか?DB テーブルは、10 ~ 20 の設定を行うには過剰に思えます。これらの設定の取得をできるだけ高速にしたいと考えています。フラットファイルは別の実行可能なオプションですか? フラットファイルの使用に関連する落とし穴は何ですか? 複数のキーと値を格納するフラット ファイルとやり取りする最も速くて簡単な方法は何ですか?
6 に答える
これにはよく PHP を使用しますparse_ini_file
。
したがって、次のように .ini ファイルを作成すると:
; This is a sample configuration file
; Comments start with ';', as in php.ini
[first_section]
one = 1
five = 5
animal = BIRD
[second_section]
path = "/usr/local/bin"
URL = "http://www.example.com/~username"
[third_section]
phpversion[] = "5.0"
phpversion[] = "5.1"
phpversion[] = "5.2"
phpversion[] = "5.3"
そして、次の PHP コードを使用して読み込みます。
define('BIRD', 'Dodo bird');
$ini_array = parse_ini_file("sample.ini", true);
print_r($ini_array);
次の出力が得られます。
Array
(
[first_section] => Array
(
[one] => 1
[five] => 5
[animal] => Dodo bird
)
[second_section] => Array
(
[path] => /usr/local/bin
[URL] => http://www.example.com/~username
)
[third_section] => Array
(
[phpversion] => Array
(
[0] => 5.0
[1] => 5.1
[2] => 5.2
[3] => 5.3
)
)
)
保存したい「設定」の種類によって異なります。それらは、DBホスト、ポート、ログインなどの「ブートストラップ」設定ですか?それとも、アプリケーション専用のアプリケーション設定ですか?
管理インターフェイスにファイルシステムにファイルを書き込ませる場合の問題は、ファイルに書き込むために必要なアクセス許可です。Webサーバーを開いてファイルを書き込むときはいつでも、コードのエラーによって重大な特権の昇格が発生する可能性が高くなります。
データベースは、潜在的なシステムセキュリティリスクを導入することなく、読み取りと書き込みを可能にするように設計されています。
「生成された」PHPファイルを使用して、静的構成データ(データベースアクセス情報など)を格納します。これは、コマンドラインのユーザーによるユーティリティスクリプトによって生成されます。その後、すべての非静的情報がデータベーステーブルに保存されます。次に、データベーステーブルは、管理領域から簡単に更新できます。アプリケーションをアップグレードすると、簡単に拡張およびアップグレードできます。
また、バックアップが必要な「データ」を1か所に一元化する方がはるかに簡単です。
memcachedまたはそれに類似したものを使用して高速化することをお勧めしますか?
ほんの2、3の考え...
PHP には .ini ファイルを読み取る関数があります。
SimpleXMLElementを介したXMLは、そのような場合に非常に役立つと思います。
構成(config.xml):
<config version="1">
<foo>value</foo>
<bar>
<baz>Boo</baz>
</bar>
</config>
それを読むためのコード:
$config = simplexml_load_file('config.xml');
$version = (int) $config['version'];
$foo = (string) $config->foo;
$baz = (string) $config->bar->baz;
それをファイルに書き込むためのコード:
$config = new SimpleXMLElement('<config version="1"/>');
$config->foo = 'value';
$config->bar->baz = 'Boo';
$config->asXML('config.xml');
フラットファイルを使用する際の主な落とし穴は、スクリプトのクラッシュや同時編集時にデータが破損する可能性があることです。
構成ファイルに PHP 配列を使用するだけです。
<?php
return array
(
'user' => 'name',
'pass' => 'word',
'one_day' => 60 * 60 * 24
);
?>
いくつかの利点は、モレンディルが述べたように、解析が不要で、可能な限り高速であり、あらゆる種類の複雑な変数/方程式を保存でき、次のことができることです。
<?php
$config = include 'path/to/file.php';
?>
ファイルにシリアル化された PHP オブジェクト (または配列) を考えてみましょう。構文解析コードを書く必要がなく、十分に速く、拡張可能です。1 つの注意点は、コードがさらに多くの設定をサポートするように成長するにつれて、設定ファイルを「アップグレード」する戦略を考えることです。