質問

仕事では、フレームワークの残りの部分を呼び出す前に、.ini ファイルを使用して変数を設定します(次のようになると思います)

function getConfigVars(){
    //read my_config.ini file
    ....
    //call framework
}

そして私は、そのようにすることで何かメリットがあるのか​​といつも疑問に思っていました。

その場合、人々が Web からアクセスするのを防ぐためにアクセス ルールを作成する必要があり、PHP はそれを解析して理解する必要があるように思えます。

では、なぜ my_config.php ではなく my_config.ini を使用するのでしょうか?セットアップ後に誰もそれに触れるべきではなく、単に変数を呼び出して、ini 変数を使用している場所で IDE にテキストを自動補完させたり、エラーを解析したりできる方が便利だと思われます。

役に立ちましたか?

解決

Zend フレームワーク ini 形式で書かれたファイルを解析する構成解析が含まれています (Zend_Config_Ini)、これを使用しているようです。

構成ファイルはドキュメント ルートに配置すべきではありません。ドキュメント ルートにない場合は、いずれにしても誰もアクセスできないため、再書き込みルールは必要ありません。

INI 形式は、構成データ キーの階層と構成データ セクション間の継承の両方を提供するように特化されています。構成データの階層は、キーをドットまたはピリオド文字 (.) で区切ることでサポートされます。セクションは、セクション名の後にコロン文字 (:) とデータの継承元のセクションの名前を続けることで、別のセクションを拡張または継承できます。

から Zend_Config_Ini ページ。

Zend Framework はこれを使用して、ステージング用、開発用、本番用の複数の構成パラメーターを使用できるようにします。これにより、実稼働用と開発用のデータベース設定を簡単に設定でき、2 つの非常に異なる設定を使用できるようになります。インクルードが配置される場所への ini ファイル内に設定されたさまざまなパス。これにより、開発中のすべての作業が即座にオフになるため、コードを開発から運用環境に移行するのがはるかに簡単になります。

確かに、これは PHP スクリプトを使用すれば可能ですが、if/then チェックだけでなく、さまざまな構成変数の解析がさらに必要になりますが、parse_ini_file() を使用すると、これらすべてが自動的に行われます。

他の回答では、プログラマー以外が変数や、構成変数として設定されている Web サイト上の何か (たとえば、サイトのレイアウトで使用されるサイトのタイトルなど) を変更する必要がある可能性があることもすでに指摘しています。INI ファイルは、これまでプログラミングをしたことがない人でも理解しやすく、読みやすいものです。

私が現在取り組んでいるウェブサイトの例:

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
resources.db.adapter       = "PDO_SQLITE"
resources.db.params.dbname = APPLICATION_PATH "/../data/db/users.db"

resources.view[] =

[staging : production]

[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.db.params.dbname = APPLICATION_PATH "/../data/db/users-testing.db"

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.db.params.dbname = APPLICATION_PATH "/../data/db/users-dev.db

これにより、コードを実行できるさまざまな環境用に複数のデータ セットを作成することが非常に簡単になります。

他のヒント

解析する必要がある INI ファイルを使用する場合と、単純にインクルードする (PHP によってキャッシュできる) PHP ファイルを使用する場合とでパフォーマンスに違いがあるかどうかを知りたいためにこの質問に来た人は次のようになります。はい、違いはありますが、それらは非常に小さいため、あまり重要ではありません。

私のベンチマークシナリオは、 config.ini 20 個のキーと値のペアを含むファイルと config.php 同じ 20 個のキーと値のペアが定義として書き込まれたファイル。Ubuntu Linux 13.04 上の PHP バージョンは 5.4.9 です。

key1 = value1
...
key20 = value20

<?php
define("key1", "value1");
...
define("key2", "value20");

構成を含む 2 つのテスト スクリプト:

<?php
$CONF = parse_ini_file("config.ini");

<?php
require_once "config.php";

パフォーマンスをテストしました ab -c 25 -n 10000.

PHP キャッシュがない場合の結果:

ini: Requests per second:    2660.89 [#/sec] (mean)
php: Requests per second:    2642.28 [#/sec] (mean)

APC PHP キャッシュの結果:

ini: Requests per second:    3294.47 [#/sec] (mean)
php: Requests per second:    3307.89 [#/sec] (mean)

テストを複数回実行しました。当然、数値は毎回異なりますが、コンセンサスは次のとおりです。 config.ini PHP キャッシュを使用しない場合は少し高速になりますが、 config.php PHP キャッシュを使用すると少し高速になります。しかし、その差は非常に小さいため、パフォーマンスに基づいて決定すべきではありません。

確かに、あなたの質問は正当な論点を提起しています。

賛成するいくつかの点 .ini ファイル:

  • 別の言語でファイルを使用する. 。Perl、Python、Ruby などを使いたいと思ったことがある場合は、スクリプトは、その言語で特に簡単で、プロジェクト設定にアクセスするために必要な処理を実行します。設定を PHP ファイルに保存した場合は、運が悪いでしょう。

  • 人間によるデータ編集. 。あなたの質問ではそれを無視しましたが、意図的かどうかに関係なく、誰かがそこに侵入する可能性が非常に高く、それは技術者ではない可能性があります。INI 形式は、たとえそれが単なる変数宣言の束であっても、PHP コードよりもはるかに怖くありません。

  • 設定を更新する. 。PHP ファイルを作成するよりも、新しい INI ファイルを作成する方がはるかに簡単だと思います。ただし、これはかなり主観的なものですが、言及する価値はあります。

  • 設定変数間の関係. 。INI ファイルを使用して設定に階層を与えるのは非常に簡単かつ直感的です。これは PHP でも可能ですが、情報を格納するために深くネストされた連想配列を実行しようとすると、それほどきちんとしたものではなく、見苦しくなる可能性があります。

これらに加えて、ほとんどの PHP プロジェクト (少なくとも私が参加しているプロジェクト) はルートから離れた場所にかなりの量のコードを保持しているため、「Web アクセスから保護する必要がある」という INI の影響は、ほとんどのシナリオでは関係ありません。フォルダーにあり、設定は通常そこにあります。

まあ、プログラマーでない人にとっては、構成変数を変更する方が簡単かもしれません...職場で必要な場合。

の慎重な配置を発見しました <?php そして ?> parse_ini_file() は引き続きファイルから関連データを取得しますが、表示を停止することもできます。

ただし、これを保護する最善の方法は、これを docroot の上に配置し、サーバー設定で *.ini へのアクセスを拒否することです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top