Экспорт переменной из PHP в оболочку - PullRequest
5 голосов
/ 05 января 2010

Я пытаюсь установить переменную, которая должна быть доступна извне PHP. В идеале это должна быть локальная переменная, но переменные среды также приветствуются.

Сначала я попробовал putenv(), но это не дает результата:

$ php -r "putenv ('PHP_TEST = string');" ; echo $ PHP_TEST

$

Когда я вызываю getenv() из того же сценария - это приводит к правильному «строковому» значению. Безопасный режим отключен, но в руководстве написано, что префикс «PHP_» жизненно важен при включении safe =, поэтому я использую его на всякий случай:)

Тогда я пытаюсь system() или shell_exec():

$ php -r "shell_exec ('PHP_TEST = string');" ; echo $ PHP_TEST

$ php -r "shell_exec ('export PHP_TEST = string');" ; echo $ PHP_TEST

$

Есть ли обходной путь? в чем может быть причина? Я использую Ubuntu Linux 9.10 «Karmic», но сервер FreeBSD дает тот же результат.

Ответы [ 2 ]

3 голосов
/ 05 января 2010

Если вы пытаетесь передать какой-то вывод в переменную оболочки, вы можете сделать это следующим образом:

$ 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

В этих примерах интерактивная оболочка является родительским процессом, а все остальное показанное является дочерним (и другими элементами).

2 голосов
/ 05 января 2010

Экспортируемые переменные среды доступны только в дочерних процессах.

Таким образом, вы сможете установить переменную окружения и затем запустить дочерний процесс. Переменная окружения будет видна в этом дочернем процессе. Однако установка его в php и последующий запуск последовательного процесса (echo, в вашем примере выше) не будут работать.

Если вы установите переменную, а затем создадите / запустите новый процесс, он должен быть виден в этом новом процессе.

...