0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Google AppEngine standard environment 2nd generation for PHP で環境の違いを判別する

Last updated at Posted at 2018-10-10

目的

現在コードが 本番 / 開発環境 / Unit Test のうち、どの環境で実行されてるか実行時に知りたい。

環境

  • 本番
  • Google AppEngine
  • 開発環境
  • nginx + php-fpm
  • Unit Test
  • phpunit

解決方法

それぞれの環境に識別用の環境変数を定義して、それを参照します。

環境変数の定義方法

本番 (Google AppEngine)

app.yaml で環境変数を設定できます。

app.yaml
env_variables:
  SERVER_ENV: prod

開発環境 (Docker)

下記は nginx の設定ファイル default.conf (でなくても良いけど) の要約です。

default.conf
location ~ \.php$ {
    # ↓ サーバプロセスの環境変数を設定する
    fastcgi_param SERVER_ENV dev;
}

Unit Test (phpunit)

phpunit.xmlで環境変数を設定できます。

phpunit.xml
<phpunit bootstrap="bootstrap.php" >
    <php>
       <env name="SERVER_ENV" value="test" />
    </php>
</phpunit>

おまけ (PHP built-in server)

SERVER_ENV=dev php -S localhost:8080 -t public

built-in server は $_SERVER に環境変数を import しないので参照時に注意が必要です。

併せて参照: PHPのビルトインサーバでは、環境変数を$_SERVERから読み出せない

判定コード

上記のように環境変数を設定しておけば php 側では、下記のように取得できます。

// 下記3つのいずれでも取得できます
echo $_SERVER['SERVER_ENV'];
echo $_ENV['SERVER_ENV'];
echo getenv('SERVER_ENV');

関数にするとこんな感じ。

function getEnvName(): string
{
  $serverEnv = getenv('SERVER_ENV');
  switch ($serverEnv) {
    case 'prod':
    case 'dev':
    case 'test':
      break;
    default:
      $serverEnv = 'unknown';
      break;
  }
  return $serverEnv;
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?