ホームページ >バックエンド開発 >PHPチュートリアル >PHP プログラム構成ファイル (ベスト?) プラクティス
php プログラムを作成するとき、データベースとキャッシュされた接続情報は config.php ファイルに直接配置されます。これには 2 つの欠点があります。 1. 開発中およびデバッグ中に、まず接続情報をローカル接続に変更し、次にコードを送信するときに接続情報をリモート接続に戻す必要があります。これは面倒で、見落としがちです。 2. 開発者はオンライン データベースの接続アドレス、アカウント番号、パスワードを直接見ることができますが、これは安全ではありません。
http://leo108.com/pid-2184.asp
PHP プログラムをオンラインで実行する場合、通常、Apache や nginx などの HTTP サーバーが必要です。 nginx を例に挙げると、設定ファイルで fastcgi_param 命令を渡して PHP leo108 のブログに変数を渡すことができます
fastcgi_param DB_HOST "192.168.1.1";
このようにして、PHP コード内の $_SERVER['DB_HOST'] を通じて対応する値を取得できます。 PHP
そのため、開発環境とオンライン環境がnginxで構築されていれば、コードを変更することなくプログラムを実行することができます。
構成
さらに進むと、
PHP
fastcgi_param CODE_ENV "production";など、現在の環境を示す変数を渡すことができます
その後、プログラム内で $_SERVER['CODE_ENV'] に基づいていくつかの異なるロジックを実行できます (たとえば、 、開発環境ではすべてのエラー メッセージが表示されますが、オンライン環境では表示されません)
設定
いいえ、実際のアプリケーションでは次の 2 つの問題が見つかります: 1. この PHP プログラムが Web サービスを提供するだけでなく、cli ツール (データベース アップグレード スクリプトなど) も提供する場合、nginx によって渡される変数を nginx で渡すことができなくなります。この時。 。 2. 配列変数の受け渡しはサポートされていないようです。 http://leo108.com/pid-2184.asp
Web と cli の両方をサポートするには、nginx 設定を介して変数を渡すことができなくなりました。PHP 独自の設定を使用できますか?
leo108 のブログ
そこで、php.ini の最後に次の設定を追加しました:
http://leo108.com/pid-2184.asp
[userconf]userconf.db_host=127.0.0.1userconf.db_name=test
php-fpm を再起動した後、ini_get( 'userconf.db_host ') 取得されたデータは空だったので、PHP ドキュメントを詳細に確認したところ、カスタム構成項目は get_cfg_var() 関数を通じて取得する必要があることがわかりました。テスト後、Web モードおよび CLI モードでは、get_cfg_var(‘userconf.db_host’) を通じて正しい値を取得できます。
構成
ただし、この解決策にもまだ欠点があります: 1. 構成を変更するには、php-fpm を再起動する必要があります。 2. php.ini は配列データをサポートしていますが、まだ十分な柔軟性がありません。PHP で直接設定するのが最善です。
設定
したがって、php.ini には設定ディレクトリへのパスのみを設定できます。各プログラムの設定ファイルは、まず php.ini からこのディレクトリへのパスを取得します。このディレクトリからphp形式の設定ファイルを読み込みます。サンプルコード: 設定
$path = get_cfg_var('userconf.dir');$conf = include($path . '/test.php');
このようにすると、設定ファイルはアクセスされるたびに再読み込みされ、変更時に php-fpm を再起動する必要がなく、異なるサイトが 1 つのサーバー上に共存できます。別の構成ファイル名を選択してください。