我正在尝试设置一个应该可以从PHP外部访问的变量。理想情况下,这应该是一个局部变量,但环境变量也是受欢迎的。
首先,我尝试了putenv()
,但这没有结果:
$ php -r“putenv('PHP_TEST = string');” ; echo $ PHP_TEST
$
当我从同一个脚本调用getenv()
时,会产生正确的“字符串”值。
安全模式已关闭,但手册中说“PHP_”前缀对于safe = on至关重要,所以我使用它以防万一:)
然后我尝试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服务器也给出了相同的结果。
答案 0 :(得分:3)
如果你试图将一些输出传递给shell变量,你可以这样做:
$ 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
在这些示例中,交互式shell是父进程,显示的所有其他内容都是子进程(以及彼此的兄弟)。
答案 1 :(得分:2)
导出的环境变量仅在子进程中可用。
因此,您将能够设置环境变量,然后生成子进程。环境变量将在该子进程中可见。但是,在php
中设置然后启动后续进程(echo
,在上面的示例中)将无效。
如果设置变量然后生成/执行一个新进程,它应该在该新进程中可见。