[PHP]コマンドライン時のサーバ設定変数に関して

Webサーバー(Nginx/Apache)の設定で SITE_TYPE を渡している場合、CLI(コマンドライン)ではその設定が読み込まれないため、環境変数として渡してあげるのが最もスマートな解決策です。

方法は大きく分けて2つあります。

方法1:実行時に環境変数を渡す(一番手軽)

コマンドを実行する際、コマンドの前に変数を書くことで、そのプロセス内だけで有効な変数を渡せます。

# 本番環境として実行したい場合
SITE_TYPE=production php cli.php /table/create

# 開発環境として実行したい場合
SITE_TYPE=development php cli.php /table/create

cronなどで実行する場合も、このように書けばOKです。

方法2:PHP側の判定ロジックを修正する(推奨)

PHPコード側で、Webサーバーからの変数($_SERVER)と、OSの環境変数(getenv)の両方を見るように修正すると、WebでもCLIでも同じロジックで動くようになります。

今の if 文の判定箇所を、以下のように書き換えてみてください。

// 1. 環境変数を取得 (CLI用)
$env_type = getenv('SITE_TYPE');

// 2. Webサーバー変数を取得 (Web用)
$server_type = $_SERVER['SITE_TYPE'] ?? null;

// 3. どちらか設定されている方を採用 (環境変数優先)
$site_type = $env_type ?: $server_type;

// 判定ロジック
if ($site_type === 'production') {
    // 本番サーバーの設定
    DEFINE('PYTHON_CMD', '/usr/bin/python3');
    // ... 他の設定

} elseif ($site_type === 'staging') {
    // ステージングの設定
    // ...

} else {
    // ここに質問にあったコードが入ります
    DEFINE('PYTHON_CMD', '/var/www/html/venv/bin/python3');
}

永続的に環境変数を設定したい場合

毎回 SITE_TYPE=... と打つのが面倒な場合(例えば開発機など)は、ユーザーのプロファイルに書き込んでしまいます。

Bash

# .bashrc または .profile に追記
echo 'export SITE_TYPE=development' >> ~/.bashrc
source ~/.bashrc

これで、次回から単に php cli.php ... と打つだけで、自動的に $env_typedevelopment が取得できるようになります。

コメント

タイトルとURLをコピーしました