web-dev-qa-db-ja.com

仮想ホスト設定を介してApplication_ENVを設定し、これをPHP

これがZend Frameworkでどのように機能するかが気に入っています。コントローラーのAPPLICATION_ENV定数を確認することで、現在使用している環境を知ることができます。

<VirtualHost *:80>
    #ServerName 
    #DocumentRoot

        SetEnv APPLICATION_ENV "development"

    # Directory
</VirtualHost>

しかし、残念ながら、現在のプロジェクトではZFを使用できません。 PHP=コードでこの環境変数を確認するにはどうすればよいですか?

49

SetEnv はApacheの環境に値を設定するため、次のようにして取得できます。

あるいは単に

  • getenv —環境変数の値を取得します

public/index.php ZFプロジェクトでは、ZFがgetenvを使用することがわかります。

// Define application environment
defined('APPLICATION_ENV')
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? 
                                  getenv('APPLICATION_ENV') : 
                                  'production'));

よく使用される代替手段は、PHPからホスト名を読み取り、それに応じて定数を定義することです。

if(!defined('APPLICATION_ENV')) {
    if(FALSE === stripos($_SERVER['SERVER_NAME'], 'www.yourdomain.com')) {
        define(APPLICATION_ENV, 'development');
    } else {
        define(APPLICATION_ENV, 'production');
    }
}

この方法では、環境設定にまったく依存する必要はありません。

47
Gordon

SetEnv は環境変数を定義します。

これが設定されると(Apacheの設定またはシステムレベルで)getenv 関数:

echo getenv('APPLICATION_ENV');


たとえば、これを.htaccessファイル:

SetEnv TEST glop

PHP codeのこの部分を使用できます。

var_dump(getenv('TEST'));

そして、あなたは得るでしょう:

string 'glop' (length=4)
11
Pascal MARTIN

$_SERVER変数からもアクセスできます。

0
O_o lovesCandy

私は同じ問題を抱えていて、それを解決しました。問題を解決する方法は、Apache initスクリプトですべての変数を宣言することです。

CentOSでApacheを使用していますが、initスクリプトは/etc/init.d/httpd

このコードを追加しますが、特定のケースに合わせて変更します。

Oracle_HOSTNAME=ora11g.home.com; export Oracle_HOSTNAME
Oracle_BASE=/u01/app/Oracle; export Oracle_BASE
Oracle_HOME=$Oracle_BASE/product/11.2.0/db_1; export Oracle_HOME
Oracle_SID=ora11g; export Oracle_SID
Oracle_TERM=xterm; export Oracle_TERM
PATH=$Oracle_HOME/bin:/usr/sbin:$PATH; export PATH
LD_LIBRARY_PATH=$Oracle_HOME/lib:/lib:/usr/lib;
export LD_LIBRARY_PATH
CLASSPATH=$Oracle_HOME/JRE:$Oracle_HOME/jlib:$Oracle_HOME/rdbms/jlib;
export CLASSPATH

これで私の問題が解決しました。これがお役に立てば幸いです。

0
Firman Syah