Мне нужно запустить PHP-скрипт из командной строки, и мне нужно установить некоторые переменные среды. К сожалению, следующее не работает:
php -dAPPLICATION_ENV=staging script.php
То, что я хотел бы сделать, это установить переменную APPLICATION_ENV
.
APPLICATION_ENV=staging php script.php
Переменная будет доступна в массиве $ _SERVER:
echo $_SERVER['APPLICATION_ENV'];
Невозможно установить переменные среды из командной строки специально для выполнения скрипта, передав параметры двоичному файлу PHP.
У вас есть несколько вариантов:
Последние два варианта, вероятно, самый чистый способ сделать это, поскольку созданная переменная существует только для времени выполнения вашего скрипта.
Реализация варианта 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
Надеюсь, это тоже поможет вам.