0

誰かがPHPで動的設定を保存/更新するための優れたシステムを持っているかどうか疑問に思っていましたか?

動的とは、他のスクリプトによって自動的に変更される設定を意味します。

現在、基本的に設定phpファイルをfile_get_contentsし、それを文字列として扱い、設定を変更し、更新された設定をfile_put_contentsするシステムを使用しています。

動作しますが、少し汚れています。これらの設定を保存/変更/プルできる他の推奨事項はありますか?Mysqlはオプションではありません。余分なクエリを避けたいのです。

追加のボーナスとして、これらの設定の多くが複数のボックスで使用されるため、このデータを複数のサーバーで共有できるシステムもあります。しかし、私たちはそれを別々に扱うことができると思います。

どうも!

4

5 に答える 5

2

特に共通データの場合は、動的データをファイルに保存する必要はありません。PHPには、これをサポートするための高度なファイルロックセマンティクスがありません。自分が何をしているのかを知っていれば、PHPの上に独自のアドバイザリーロケーキングシステムを実装できますが、自分が何をしているのかを知っていれば、質問することはありません。

Mysqlはオプションではありません、余分なクエリを避けたい

まあ。

あなたが提供した情報を考えると、MySQLはおそらく最良の選択肢です。また、データベースに問題をロードした場合、データに別のサブストレートを使用しようとしても役に立ちません。

実際、カスタムデータベースバインドセッションハンドラー内に値の格納と取得を実装することをお勧めします(そしてすべての要求に対してセッションを有効にします)。

使用できるツールは他にもあります-nosqlデータベースとmemcacheは明らかな候補です-しかし、MySQLインスタンスがすでに利用可能になっている場合、それらはあまり意味がありません。

(共有メモリとAPC変数ストアには、ファイルベースのストレージと同じ問題があります)

于 2011-07-20T12:04:57.823 に答える
1

MySqlを使用したくない場合は、現在行っていることが最善の解決策だと思います。どのような種類のプロパティ/ iniファイル書き込みシステムもはるかに高価であり、同時アクセスの問題を解決できません。この問題を解決するには、更新されたファイルを同じフォルダー内の一時ファイルに書き込み、古いsettings.phpを削除して、一時ファイルの名前をsettings.phpに変更することをお勧めします。settings.phpが削除された直後、一時ファイルの名前が変更される前にリクエストが行われる可能性はまだわずかです。これは、ファイルを含めるときに次のように処理できます。

if( file_exists( 'settings.php' ) ) {
    include( 'settings.php' );
} else {
    /* ... wait 100 miliseconds or so and try again... do this a few times and then fail ... */
}

これは非常に安全なはずです。

于 2011-07-20T12:44:15.230 に答える
1

ファイルベースのアプローチに固執する場合は、次の点に注意してください。

ネイティブパーサーの使用

Cで記述されたパーサーは、PHPで記述されたパーサーよりも高速である可能性があります。頭に浮かぶ2つのオプションは

settings.php整形式のPHPコードを含むファイルを使用します。私が過去に使用したアプローチの1つは、次のようなファイルを作成することです。

<?php return
array(
'key' => 'value'
);

このファイルはinclude1回以上-dにすることができ、includeステートメントは構成配列を返します。新しい設定を作成するときは、を使用var_export()して有効なphpコードを取得します。

もう1つのアプローチは、settings.csvファイルを使用することです。を使用して読み取り、を使用してfgetcsv()書き込みfputcsv()ます。

「部分的な」保存を回避する

設定の更新中にファイルの一部が読み取られないようにするには、最初に新しい設定を一時ファイルに書き込み、次にこのファイルを設定ファイルの場所に移動します(mv (1)* nixで使用することをお勧めします)。

于 2011-07-20T13:08:39.760 に答える
0

私はiniファイルと言います。parse_ini_file()http://php.net/manual/en/function.parse-ini-file.php)は、読み取りを処理する優れた関数であり、書き込みの答えはここにあります。iniファイルを作成し、PHPで値を書き込みます。

于 2011-07-20T11:51:48.360 に答える
0

この目的のために、これを使用します:http: //projects.jgotti.net/projects/simplemvc/browse/trunk/includes/fx-conf.php これは、キー=値のペアを含む単純なテキストファイルの読み取りと書き込みを行います。

parse_conf_fileは、confを定義された値としてロードするか、キー値の連想配列を返すことができます。Write_conf_fileを使用すると、キー値の配列をパラメーターとして渡すことにより、必要な値のみを上書きできます。

allow_url_fopenをtrueに設定している場合は、別のサーバーから構成ファイルを問題なくロードできます。

この助けを願っています

于 2011-07-20T11:56:15.637 に答える