Я пытаюсь установить переменную, которая должна быть доступной снаружи PHP. Идеально это должно быть локальной переменной, но переменные среды также приветствуются.
Во-первых, я попробовал putenv()
, но это не дает результата:
$ php-r "putenv ('PHP_TEST=string')";; $PHP_TEST эха
$
Когда я звоню getenv()
из того же сценария — это приводит к правильному 'строковому' значению. Безопасный режим выключен, но в руководстве говорится, что 'PHP _' префикс жизненно важен с safe=on, таким образом, я использую его на всякий случай :)
Затем я пробую system()
или shell_exec()
:
$ php-r "shell_exec ('PHP_TEST=string')";; $PHP_TEST эха
$ php-r "shell_exec ('экспортируют PHP_TEST=string')";; $PHP_TEST эха
$
Существует ли обходное решение? какова могла бы быть причина? Я использую "Кармический" Ubuntu Linux 9.10, но сервер FreeBSD дает тот же результат.
Если вы пытаетесь передать какой-то вывод в переменную оболочки, вы можете сделать это так:
$ testvar=$(php -r 'print "hello"')
$ echo $testvar
hello
Показывая, как экспорт влияет на вещи:
$ php -r '$a=getenv("testvar"); print $a;'
$ export testvar
$ php -r '$a=getenv("testvar"); print $a;'
hello
В этих примерах интерактивная оболочка является родительским процессом, а все остальное показывается как дочернее (и как братья и сестры друг друга).
]Переменные окружения, которые экспортируются, доступны только в дочерних процессах.[
] []Таким образом, вы сможете установить переменную окружения, а затем породить дочерний процесс. Переменная окружения будет видна в дочернем процессе. Однако установка ее в []php[
] и последующий запуск []последовательного [] процесса ([]echo[
], в вашем примере выше) не сработают. [
]Если Вы установите переменную и затем запустите/выпустите новый процесс, то это должно быть видно в новом процессе.[
].