相対的な長所/短所で私が見るオプションは次のとおりです。
ファイルベースのメカニズム
これらでは、コードがiniファイルを見つけるために特定の場所を調べる必要があります。これは解決が難しい問題であり、大規模なPHPアプリケーションでは常に発生します。ただし、実行時に組み込まれる/再利用されるPHPコードを見つけるには、問題を解決する必要があります。
これに対する一般的なアプローチは、常に相対ディレクトリを使用するか、現在のディレクトリから上に向かって検索して、アプリケーションのベースディレクトリで排他的に名前が付けられたファイルを見つけることです。
構成ファイルに使用される一般的なファイル形式は、PHPコード、ini形式のファイル、JSON、XML、YAML、およびシリアル化されたPHPです。
PHPコード
これにより、さまざまなデータ構造を表現するための柔軟性が大幅に向上し、(includeまたはrequireを介して処理されると仮定して)解析されたコードがオペコードキャッシュから利用可能になり、パフォーマンスが向上します。
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システムから直接構成を取得することは実行可能なソリューションです。ただし、多くの場合、これにはかなりのパフォーマンスオーバーヘッドが伴うため、キャッシュすることをお勧めします。