1

ブラウザの種類に基づいて特定のコンテンツを生成できるのと同じように、サーバーまたはサイト名を参照せずに、PHP を実行しているサーバーに基づいて特定のコンテンツを生成する方法はありますか?

たとえば、PHP が環境を自動的に検出し、DB 接続、エラー用の ini_set などを、開発環境、ITS 環境、UAT 環境、または運用環境に応じて構成する方法です。

私が考えた 2 つの方法は、開発環境と QA 環境を示す HTTP ヘッダーを認識する方法と、php.ini にカスタム プロパティを設定する方法です。

私は少し目が覚め、http ヘッダーを読み取る php 関数を見つけましたが、php は Web サーバーで設定したものを上書きし、php.ini で設定できるかどうかはまったくわかりません。

カスタム値を php.ini に追加できるかどうかはわかりませんが、テストを行ったところ、ini_get でそれが見つかりませんでした (もちろん、php.ini を変更した後に Web サーバーを再起動しました)。

4

5 に答える 5

4

Apache で環境変数 (conf、vhost、.htaccess、または httpd Daem として) を指定し、^$_ENV^superglobal 経由でアクセスできます。

于 2009-07-17T15:05:23.643 に答える
0

IIS で FastCGI を使用すると、環境変数を設定できます。$_ENV では利用できないようですが、getenv("varname") で取得できます。

IIS 5 または 6 で FastCGI 環境変数を構成するには、C:\%systemdrive%\system32\inetsrv\fcgiext.ini を編集する必要があります。

例えば:

[Types]
php=d:\Dev\PHP\php-cgi.exe
php:1=PHP Site 1
*=Wildcard Mapping

[d:\Dev\PHP\php-cgi.exe]
QueueLength=999
MaxInstances=20
InstanceMaxRequests=500

[PHP Site 1]
ExePath=d:\Dev\PHP\php-cgi.exe
EnvironmentVars=PHPRC:d:\Dev\PHP\,SiteType:Developer

この例では IIS 5 であるため、サイトは 1 つしかなく、[Types] の 2 行目に示されているように、サイト ID は 1 です。

IIS 6 では複数のサイトが存在する場合があり、次のリンクからサイト ID を見つける方法がわかります: http://weblogs.asp.net/owscott/archive/2005/07/29/how-to-find-the-siteid -in-iis5-and-iis6.aspx

IIS 7 の Administration Pack をインストールすると、UI を介して IIS 7 を構成できるようになります。

于 2009-07-20T11:45:30.417 に答える
0

以下を使用して、さまざまなサーバーのさまざまな設定をロードします。

switch ($_SERVER['SERVER_NAME']) {
case 'web-host': case '10.0.0.208':
    # Set DB Settings
case 'mydomain.com': default:
    # Live server settings
}

これまでのところ問題はありませんでした

于 2009-07-17T14:56:14.067 に答える
0

$_ENV / http://www.php.net/manual/en/reserved.variables.environment.php

于 2009-07-17T14:59:07.960 に答える
0

まだ言及されていない別の代替手段は、サイト スクリプトの先頭に含まれるサーバー固有の (ただし同じ名前の) 構成ファイルを作成することです。そのサーバー固有の構成ファイルでは、構成変数を定数として設定できます。そうすれば、後でロードされた「汎用」構成ファイルがあった場合、その値はサーバー固有の構成ファイルでオーバーライドされる可能性があります。これは、定数を再定義できないためです。サーバー固有の構成ファイル名を同期から除外するか、誤って上書きされないようにメイン コンテンツの外のパスに保持する必要があります。

この目的のために、定数配列 2 クラスを使用して定数配列を構成することもできます。

サーバー固有の構成ファイルを使用する場合、現在の SERVER_NAME を気にする必要はありません。これにより、現在のシステム名に関係なく、目的の環境を簡単に定義できるようになり、QA の目的にも役立ちます。

于 2011-03-17T17:53:08.843 に答える