私が相対的なメリット/弱点で見るオプションは次のとおりです。
ファイルベースのメカニズム
これらでは、iniファイルを見つけるためにコードが特定の場所を調べる必要があります。これは解決するのが難しい問題であり、大きなPHPアプリケーションでは常に発生する問題です。ただし、実行時に組み込まれる/再利用されるPHPコードを見つけるために、問題を解決する必要がある可能性があります。
これに対する一般的なアプローチは、常に相対ディレクトリを使用するか、現在のディレクトリから上方向に検索して、アプリケーションのベースディレクトリでのみ指定されたファイルを見つけることです。
構成ファイルに使用される一般的なファイル形式は、PHPコード、ini形式のファイル、JSON、XML、YAML、シリアル化されたPHPです。
PHPコード
これは、さまざまなデータ構造を表現するための非常に大きな柔軟性を提供し、(includeまたはrequireを介して処理されると仮定して)解析されたコードはopcodeキャッシュから利用できるようになり、パフォーマンス上の利点が得られます。
include_pathのは、追加のコードに依存することなく、ファイルの潜在的な場所を抽象化するための手段を提供します。
一方、構成をコードから分離する主な理由の1つは、責任を分離することです。ランタイムに追加コードを注入するためのルートを提供します。
構成がツールから作成された場合、ツールでデータを検証できる可能性がありますが、HTML、URL、MySQLステートメント、シェルコマンドなどに存在するPHPコードに埋め込むためのデータをエスケープする標準関数はありません... 。
シリアル化されたデータ
これは、少量の構成(最大200項目)で比較的効率的で、任意のPHPデータ構造を使用できます。データファイルの作成/解析に必要なコードはごくわずかです(そのため、適切な権限でのみファイルが書き込まれるようにするための努力を費やすことができます)。
ファイルに書き込まれたコンテンツのエスケープは自動的に処理されます。
オブジェクトをシリアル化できるため、構成ファイル(__wakeupマジックメソッド)を読み取るだけで、コードを呼び出す機会が生まれます。
構造化ファイル
Marcel、JSON、またはXMLで提案されているようにINIファイルとして保存すると、ファイルをPHPデータ構造にマップする(そしてXMLを除いて、データをエスケープしてファイルを作成する)シンプルなAPIも提供され、コードの呼び出しが不要になります。シリアル化されたPHPデータを使用した脆弱性。
シリアル化されたデータと同様のパフォーマンス特性があります。
データベースストレージ
これは、大量の構成がある場合に最もよく考慮されますが、現在のタスクに必要なものを選択します-約150のデータ項目で、ローカルのMySQLインスタンスからデータを取得する方が、データファイルのシリアル化を解除します。
OTOHは、データベースへの接続に使用する資格情報を保存するのに適した場所ではありません。
実行環境
PHPが実行されている実行環境で値を設定できます。
これにより、PHPコードが構成の特定の場所を探す必要がなくなります。OTOHは、大量のデータに適切にスケーリングできず、実行時に普遍的に変更することが困難です。
クライアント上
構成データを保存するために言及しなかった場所の1つはクライアントです。繰り返しになりますが、ネットワークのオーバーヘッドは、これが大量の構成にうまく対応できないことを意味します。また、エンドユーザーはデータを制御できるため、改ざんが検出可能な形式で(つまり、暗号化署名を使用して)保存する必要があり、その開示によって侵害される(つまり、可逆的に暗号化される)情報を含めることはできません。
逆に、これには、エンドユーザーが所有する機密情報を保存するための多くの利点があります。これをサーバーに保存しないと、そこから盗むことはできません。
ネットワークディレクトリ
構成情報を保存するもう1つの興味深い場所は、DNS / LDAPです。これは、少数の小さな情報に対して機能しますが、第1正規形に固執する必要はありません。たとえば、SPFを検討してください。
インフラストラクチャは、キャッシング、レプリケーション、配布をサポートしています。したがって、非常に大規模なインフラストラクチャに適しています。
バージョン管理システム
コードのように構成を管理し、バージョン管理する必要があります。したがって、VCシステムから直接構成を取得することは、実行可能なソリューションです。しかし、多くの場合、これにはかなりのパフォーマンスオーバーヘッドが伴うため、キャッシングをお勧めします。