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

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

php -dAPPLICATION_ENV=staging script.php

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

Ответ 1

APPLICATION_ENV=staging PHP скрипт.php

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

echo $_SERVER['APPLICATION_ENV'];

Ответ 2

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

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

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

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

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

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

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

<?php

    putenv('APPLICATION_ENV=staging');

    include('script.php');

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

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

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

<?php

    $applicationEnv = $argv[1];

    // rest of you script

... и вызовите script как:

PHP скрипт.php staging

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

Ответ 3

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

export APPLICATION_ENV='staging'

Ответ 4

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

Ответ 5

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

ENV_VAR='var' PHP скрипт.php 

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

ENV_VAR1=1 ENV_VAR2=2 ENV_VAR3=3 PHP скрипт.php 

Ответ 6

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

PHP скрипт.php APPLICATION_ENV=staging

И в script.php code:

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

Ответ 7

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

export APPLICATION_ENV=staging && PHP скрипт.php

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