web-dev-qa-db-ja.com

PHPでgetenv()を使用し、共有ホストでコンパイルされたphp-cgiを使用して.htaccessでSetEnvを使用する方法

主要な質問を明確にするためにコンテキストに入れるだけです:

開発マシンでは、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が返されます。これを解決する方法はありますか?

16
Steven Rosato

はい、やっとできました。ドリームホストでは、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');を介して取得できます。

14
Steven Rosato

SetEnv ディレクティブを機能させるには、ホスティングサービスで_mod_env_モジュールをアクティブにする必要があります...

しかし、それがアクティブになっている場合でも、多分あなたは SetEnv を使用する許可を必要としないかもしれません。

問題がコードにないことを確認するために、 phpinfo() の出力を確認することをお勧めします。ページの下部に、環境変数を含むセクションがあるはずですPHP=から見られるように-あなたがそこにいなければ、それはあなたにとって良い兆候ではありません...

10
Pascal MARTIN

$ _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";

http://php.net/variables-order

0
Invincibear