主要な質問を明確にするためにコンテキストに入れるだけです:
開発マシンでは、PHP5.3.1がモジュールとしてApacheにインストールされています。アプリケーションのルート.htaccessファイルでSetEnv APPLICATION_ENVIRONMENT開発を使用しています。その後、getenv( 'APPLICATION_ENVIRONMENT')を使用して任意のPHPスクリプトから簡単に取得できます。
本番サーバーの共有ホスト(dreamhost)では、直接サポートされていないため、自分でphp5.3.1をコンパイルしました。 getenv( 'APPLICATION_ENVIRONMENT')がfalseを返すことを除いて、すべてが正常に機能します。
私のドメインのsharedhost root .htaccessでは、この.htaccessファイルを使用します
Options +ExecCGI
AddHandler php-cgi .php
Action php-cgi /cgi-bin/php.cgi
<FilesMatch "^php5?\.(ini|cgi)$">
Order Deny,Allow
Deny from All
Allow from env=REDIRECT_STATUS
</FilesMatch>
Options -indexes
php5.cgiは/ cgi-binにあり、非常にうまく機能します。もちろん、私のアプリケーションのルートフォルダーには、別の.htaccessを定義しています。
SetEnv APPLICATION_ENVIRONMENT production
しかし、getenv( 'APPLICATION_ENVIRONMENT')を使用するとfalseが返されます。これを解決する方法はありますか?
はい、やっとできました。ドリームホストでは、fastcgiを使用できるため、それに環境変数を宣言できます。この単純なスクリプトを追加するだけです
#!/bin/sh
export PHP_FCGI_CHILDREN=2
exec /home/USERNAME/YOURDOMAIN/cgi-bin/php.cgi
コンパイルしたPHP5.3.1があった場所です。 dreamhostのウォッチドッグによってより多くのメモリが許可される、dispatch.fcgiと呼ばれるそのファイルのchmod 744。
その後、ドメインの.htaccessに以下を追加しました:
Options +ExecCGI
AddHandler fastcgi-script fcg fcgi fpl
AddHandler php5-fastcgi .php
Action php5-fastcgi /dispatch.fcgi
アプリケーションのルートに、次の.htaccessがあります:
SetEnv APPLICATION_ENVIRONMENT staging
PHPスクリプトでは、getenv( 'REDIRECT_APPLICATION_ENVIRONMENT');を介して取得できます。
$ _ENVが機能するためには、php.iniでvariables_order = "GPCSE"
を再構成する必要がありました。デフォルトでは、$ _ ENVのEは含まれていませんでした。元々はvariables_order = "GPCS"
でした。
このディレクティブは、PHPの起動時に登録されるスーパーグローバル配列を決定します。G、P、C、E、Sは、それぞれのスーパーグローバルの略語です:GET、POST、COOKIE、ENV、およびSERVER 。これらのアレイの登録にはパフォーマンス上のペナルティがあり、ENVは他のアレイほど一般的に使用されていないため、本番サーバーではENVは推奨されません。必要に応じて、getenv()を使用して環境変数にアクセスできます。 。
デフォルト値: "EGPCS"
開発価値:「GPCS」
生産値: "GPCS";