Настройка переменной окружения PHP при запуске сценария командной строки

Мне нужно запустить PHP-скрипт из командной строки, и мне нужно установить некоторые переменные среды. К сожалению, следующее не работает:

php -dAPPLICATION_ENV=staging script.php 

То, что я хотел бы сделать, это установить переменную APPLICATION_ENV .

 APPLICATION_ENV=staging php script.php 

Переменная будет доступна в массиве $ _SERVER:

 echo $_SERVER['APPLICATION_ENV']; 

Невозможно установить переменные среды из командной строки специально для выполнения скрипта, передав параметры двоичному файлу PHP.

У вас есть несколько вариантов:

  1. Установите переменную глобально в системе.
  2. Задайте переменную в командной строке перед вызовом сценария. Это будет сохраняться в среде после завершения вашего скрипта, чего вы, возможно, не захотите.
  3. Оберните скрипт PHP в другом скрипте, позволяя создать временную переменную, которая существует только в течение всего сценария.
  4. Используйте вместо командной строки параметр командной строки.

Последние два варианта, вероятно, самый чистый способ сделать это, поскольку созданная переменная существует только для времени выполнения вашего скрипта.

Реализация варианта 1 зависит от системы.

Реализация опции 2 также зависит от системы – в Windows вы должны set APPLICATION_ENV=staging&& php script.php а на * nix это будет export APPLICATION_ENV='staging' && php script.php .

Если вам нужно перейти на вариант 3, у вас может возникнуть соблазн пойти на сценарий оболочки, но это не переносится (вам понадобится командный файл для Windows и сценарий оболочки для сред * nix. Вместо этого я предлагаю вам написать простой сценарий оболочки PHP, что-то вроде этого:

 <?php putenv('APPLICATION_ENV=staging'); include('script.php'); 

Это позволяет оставить неизменяемый целевой скрипт и установить только переменную среды для сеанса скрипта.

Можно было бы создать более сложный сценарий оболочки, который позволит вам указывать переменные в командной строке и даже динамически указывать скрипт, который должен выполняться при установке этих переменных.

Вариант 4 может быть реализован с использованием переменной $argv :

 <?php $applicationEnv = $argv[1]; // rest of you script 

… и вызовите скрипт следующим образом:

 php script.php staging 

Однако мне кажется, что вы, кажется, указываете на сценарий, в котором работает среда (staging, dev, live и т. Д.) – в этом случае может быть проще всего установить всю серверную переменную и переименовать ее по мере необходимости для предотвращения столкновения с переменными, которые могут быть установлены другими приложениями. Таким образом, вы можете просто вызвать скрипт и не беспокоиться об этом. Это предполагает, что среда промежуточного запуска работает на другой машине в режиме реального времени (что должно быть).

Когда вы выполняете скрипт PHP из командной строки, он наследует переменные среды, определенные в вашей оболочке. Это означает, что вы можете установить переменную среды, используя команду export, например:

 export APPLICATION_ENV='staging' 

Вы можете установить переменную в /etc/environment такую ​​как FOO="bar" которая затем доступна с getenv () как в CLI, так и в веб-запросах. Возможно, вам понадобится переуступка, чтобы это изменение вступило в силу.

Вот пример установки одной envirnnomental переменной:

 ENV_VAR='var' php script.php 

На всякий случай вы хотите установить несколько переменных. Попробуйте следующее:

 ENV_VAR1=1 ENV_VAR2=2 ENV_VAR3=3 php script.php 

Попробуйте использовать putenv и передать переменные через параметры

 php script.php APPLICATION_ENV=staging 

И в коде script.php:

 for($i=1;$i<count($argv);$i++){ putenv($argv[$i]); } 

У меня такая же ситуация, и я использую следующий код (он работает для меня):

 export APPLICATION_ENV=staging && php script.php 

Надеюсь, это тоже поможет вам.