2010-01-04 10 views
5

PHP 외부에서 액세스 할 수있는 변수를 설정하려고합니다. 이상적으로 이것은 로컬 변수 여야하지만 환경 변수도 환영합니다.PHP에서 변수를 쉘로 내보냄

첫째, putenv()을 시도했다, 그러나 이것은 어떤 결과를 제공하지 않습니다 : -r

$ PHP는 "하는 putenv ('PHP_TEST = 문자열');" ; 에코 $ PHP_TEST

$

난 같은 스크립트에서 getenv() 전화 - 그것은 바로 '문자열'값을 초래한다. 안전 모드가 꺼져 있지만, 매뉴얼 'PHP_'접두사 그래서 난 단지의 경우 :)에서 사용에 = 안전에 매우 중요하다 말한다

그럼 난 system() 또는 shell_exec() 시도

:

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

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

$

는 해결 방법이 있습니까? 이유가 무엇일까요? 저는 우분투 리눅스 9.10 "Karmic"을 사용하고 있지만, FreeBSD 서버는 동일한 결과를 제공합니다.

답변

3

, 당신은 이런 식으로 작업을 수행 할 수 있습니다

$ 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 

의를 대화식 셸은 부모 프로세스이며 표시되는 다른 모든 요소는 자식 (및 서로의 형제)입니다.

+0

감사합니다. 그것은 질문을 분명하게 만듭니다. 그렇다면'getopt' (그리고 다른 비 내장 프로그램들)이 변수들을 외부 문맥으로 어떻게 export 할 수 있는가? (예 :'getopt'는'$ OPTIND'를 내 보낸다) – kolypto

+0

외부의'/ usr/bin/getopt'는 혼란 스럽지만'getopts'라는 내장 함수로 그렇게 할 수 없다. –

2

내 보낸 환경 변수는 하위 프로세스에서만 사용할 수 있습니다.

환경 변수를 설정 한 다음 하위 프로세스를 생성 할 수 있습니다. 환경 변수는 해당 하위 프로세스에서 볼 수 있습니다. 그러나 php으로 설정 한 다음 연속적인 프로세스 (위의 예에서 echo)를 실행하면 작동하지 않습니다.

변수를 설정 한 다음 새 프로세스를 생성하거나 실행하면 새 프로세스에서 볼 수 있어야합니다. 당신은 쉘 변수에 약간의 출력을 전달하려는 경우

관련 문제