2009-04-28 8 views
10

PHPで書かれたアプリがあります。設定可能な変数がいくつかあります。私たちは、ユーザーが設定のセットを作成し、それらの設定を簡単に切り替えることができる機能を実装しています。私の設定をどのように保存すればよいですか? XMLとして? .iniファイルで?複数の.iniファイルで?データベースに?php app-xmlやiniやdbの設定を保存する方法

フィールドを道路に追加すると、最も柔軟性が増します。コーディングの利便性?

私がdbを使用している場合、私はそれから離れて恥ずかしがり屋になってしまう価値がない理由のために、アプリケーションの主要なものとは別のものを使用しなければなりません。 (また、db用の.mdbファイルを使用しています)

私はxmlルートをダウンしていますが、SimpleXMLを使用してconfigsを追加および編集する際に問題があります。また、アプリケーションは、php 5.1.6と互換性がなければならず、私はいくつかの機能について少し心配しています。

は本当に....カスタムINIファイルを作成することで対処決して

小さな明確化:ユーザーがファイルを触れないだろう - 彼らは非専門的です。初期ファイルの設定は私たちによって行われますが、私たちが選んだフォーマットに設定を書き出すツールを書いています。

答えて

4

異なるDBに1つのDBの設定を保存することは、あまり意味がありません。

jmucchielloで提案されているように、私はiniファイル、xmlファイル、またはPHPファイルのいずれかを選択します。各オプションには長所と短所があります。 xmlとiniの場合、xmlは柔軟性は高いが、維持するのが難しい(読みにくい)。あなたのニーズがiniでカバーされている場合は、より単純な解決策をとってください。 iniファイル以上を必要とする場合にのみxmlを使用してください。

PHPソリューションでは、読みやすさをiniとxmlの間のどこかで評価しますが、現在の設定を保存することは難しくなります。だから私がアプローチを好むほど、現在のシナリオでは私はそれをお勧めしません。

+0

言及する価値のある別のポイントは、構文エラーを伴うconfig.phpファイルがアプリケーションをクラッシュさせ、時々エラーを溢れることです(設定ファイル自体がアプリケーションの一部になるため)。 .xmlまたは.iniを使用すると、構成内の構文エラーからより正常に回復するためのパーサーコードを記述できます。 – codemagician

1

私はここの答えは本当に個々の状況に依存すると思う。これらのそれぞれがより良い選択肢になる場合があります。あなたの特定のケースでは、xmlがおそらく最高でしょう。しかし、xmlがiniファイルに本当に輝くところは、関連する複数のオプションがある場合です。たとえば、特定の接続のノードの下にある接続のさまざまな部分のノードを持つデータベースの接続情報を保持する必要がある場合は、読みやすく保守しやすくなります。それは実際にデータに依存します。

また、単一の値を取り出して、ファイル全体をアプリケーションの先頭にメモリにロードしない場合、xmlファイルが使いやすくなるとも言えます。

2

実際、私は構成のための実行可能なPHPファイルを好む。実行可能ファイルでは、他のソリューションを使用して簡単には達成できないことがたくさんあります。実行可能なファイルの唯一の大きな欠点は、ファイルを安全に編集するために管理者がPHPに精通していることです。 PHPは、コードであるため、複雑なデータ型を設定に記述することもできます。

DBは、dbを検索して接続するために外部構成ファイルが必要なので問題です。

XMLは設定に対して過剰です。

INIファイルが機能し、PHPのiniライブラリを使用して読み込むことができます。 parse_ini_file()を参照してください。 iniファイルは複雑なデータ型を非常にうまく扱っていません。イタイMoavへの答えで

EDIT(コメントはこの権利をフォーマットしません):

<?php /* my config file */ 

$_CFG = Array(); /* problem solved */ 
$_CFG['key1'] = 'value1'; 
?> 
+1

グローバルスコープに汚れがあり、誤ってグローバル登録がオンになっていると、深刻なセキュリティ上の脅威があります。 –

+0

あなたの設定はおそらく何があってもグローバルスコープになるでしょう。それが構成の理由です。そして、単純な$ _CFG = Array();設定ファイルの先頭にあるregister_globalsの問題を解決します。 – jmucchiello

+0

私たちは実際にセキュリティについて心配する必要はありません。これはローカルに実行されるアプリケーションにコンパイルされています。 – sprugman

5

私は、PHPファイル内の構成項目を格納します。これは最も柔軟な方法です私はを使用しています。

$config['website_url'] = 'google.com'; 

は、私は、次のファイル構造

- config/development 
- config/production 

を持っている、これは TRUE、それは生産の構成アイテムと副をアップロードしているとき、私は、IN_PRODUCTIONという名前のソフトウェアの初期定義された定数を持っていますその逆。

これは簡単で維持しやすいです。

-Mathew

+2

設定変数をiniファイルに格納すると、データを連想配列に簡単に取り込むことができます。 $ config = parse_ini_file( "config.php"); – tj111

+0

私はparse_ini_file()について知っていますが、ファイルに変更された設定を書き出す方法はありますか? (私は様々なクラスなどをphp.netのコメントで見てきましたが、それを行うネイティブ関数は見つかりませんでした)。 – sprugman

+1

一緒に使用されるjson_decode関数とfile_get_contents関数は実際にはparse_ini_fileは単独で機能します。なぜ私はj​​sonがphpで設定を保存するより頻繁なオプションではないのだろうかと思います。確かにXMLよりも面白く、iniよりも簡潔です。また、jsonは型認識型です。つまり、10進数は文字列ではなく数値として解析できます。 phpの将来の改訂版ではさらに高速になるparse_json_file関数が登場する可能性があります。 –

0

私は、iniファイルのために行くだろう、彼らが読める人間で、彼らは(...とあなたがキャッシュ場合)非常に高速に解析されています。
確かにXMLではありません。人が読めることが少なく、非常に高速ではない。
私は速度のせいでDBをしません。
GLOBALスコープを使用するため、PHPバールを使用しません。

0

設定ファイルを読み込む独自の設定クラスを作成します。良い例は、CodeIgniterが設定を処理する方法です。

http://codeigniter.com/user_guide/libraries/config.html

これは、デフォルトでは、いくつかの設定ファイルをロードするか、Configクラスで特定のものを読み込むことができます。

ソースコードをダウンロードして、教育目的でソースコードをどのように使用するかを見てみましょう。

もう一つのオプションは、データベースからconfig配列を使ってphpファイルを生成することです。したがって、すべてのオプションを管理し、ファイルの保存を保存することができます。

2

ちょうど一瞬前に同じ質問の投稿が表示されましたが、ここにリンク先の良い解決策があります。 有用なコードを収集することをお勧めします。私は考えます。 :)

iniHandler classをクリックすると、INIハンドラクラスが表示されます。

+0

ウェブサイトが見つかりません – diEcho

関連する問題