2009-02-27 9 views
24

私はPHPに多くの設定情報を保存する必要があります。私は、次を検討している設定変数をPHPに保存する最も良い方法は何ですか?

....

// Doesn't seem right. 
$mysqlPass = 'password'; 

// Seems slightly better. 
$config = array(
    'mysql_pass' => 'password' 
); 

// Seems dangerous having this data accessible by anything. but it can't be 
// changed via this method. 
define('MYSQL_PASSWORD', 'password'); 

// Don't know if this is such a good idea. 
class Config 
{ 
    const static MYSQL_PASSWORD = 'password'; 
}  

これは私がこれまで考えてきたすべてのです。私はrequire /config.inc.phpと私のアプリケーションにこの設定情報をインポートするつもりです。

設定データの保存に関しては何が役立ち、これに関するベストプラクティスは何ですか?

答えて

7

私はいつもオプション#2を使い、所有者以外の誰もそれにアクセスすることはできません。これは、Joomla、vBulletin、ギャラリーなどのPHPアプリケーションの中で最も一般的な方法です。

最初の方法はあまりにも面倒です(読みやすさ)、3番目はやりすぎです。私はクラスメソッドについて考えたことがないので、他の誰かがクラスメソッドを入力することができます。しかし、正しいアクセスがクラスの使用に使用されている限り、それは問題ありません。


例..

define('EXAMPLE1', "test1"); // scenario 1 
$example2 = "test2"; // scenario 2 

function DealWithUserInput($input) 
{ 
    return eval($input); 
} 

今、このコードの例は本当にばかが、あくまでも一例です。ユーザーが入力に使用しようとするシナリオに応じて、関数によって返される内容を検討します。

シナリオ2は、関数内でグローバルにした場合にのみ問題が発生します。さもなければ、それは範囲外であり、到達不能です。

+0

MYSQL_PASSWORDを入力すると、実際のパスワードと一緒に渡される可能性があります。 – alex

+0

あなたがリストした2番目の方法に従えば、それが起こる可能性があります。基本的には、グローバル変数として設定し、どのスコープでも表示できます。 クラスや関数が$ config配列にアクセスする方法を選択することができます。間違った範囲に表示されない限り、問題はないはずです。 –

+0

編集された投稿は、あなたのコードに定義されたものと、ユーザーがどのように情報を得ることができるかという2つの異なる方法の例を提供します。 –

1

私は一般的に2番目の方法を使用します...データベース接続を扱うときは、通常、要求の始めに接続を開き、最後に接続を閉じます。私は、接続を確立し、グローバル配列(unset()関数を使って)からユーザー名/パスワードを削除する関数を持っています。これは、システムの他の部分が "機密" mysql接続データにアクセスするのを防ぎます。

0

また、ほとんどの設定値ではオプション2を使用しています。 のクラスを実装しようとしている場合は、一般的な設定クラスの代わりに影響を与えるクラスに特定の値を関連付けます。

例では、クラスはデータベース接続用で、インスタンスはパスワードdb_nameなどを保存します。これはデータを適切にカプセル化し、必要に応じて複数の接続を作成する簡単な手段を提供します。

+0

設定データを変更できるように1つのファイルを編集する場合を除いて、Dbクラスに割り当てられた定数は、1つのアクセスポイント(これが私が望むもの)より難しくなります – alex

4

私はそれもuserbaseのビットに依存していると思います。設定が非常にユーザーフレンドリーでなければならない場合や、Webなどで設定を変更する必要がある場合

私はこれにZend Config Iniを使用し、その他の設定はSQL DBに保存されます。

+0

前にその方法を聞いたことはありません。知っておいてよかった! –

関連する問題