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_type で development が取得できるようになります。

コメント