【问题标题】:Export a variable from PHP to shell将变量从 PHP 导出到 shell
【发布时间】:2011-01-01 10:59:15
【问题描述】:

我正在尝试设置一个可以从 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('export PHP_TEST=string');" ;回声 $PHP_TEST

$

有解决方法吗?可能是什么原因? 我使用的是 Ubuntu Linux 9.10 "Karmic",但 FreeBSD 服务器给出了相同的结果。

【问题讨论】:

    标签: php shell export environment-variables


    【解决方案1】:

    导出的环境变量仅在子进程中可用。

    因此,您将能够设置一个环境变量,然后生成一个子进程。环境变量将在该子进程中可见。但是将其设置为 php 然后启动 successive 进程(echo,在您上面的示例中)将不起作用。

    如果您设置变量然后生成/执行一个新进程,它应该在该新进程中可见。

    【讨论】:

      【解决方案2】:

      如果你想将一些输出传递给一个 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 是父进程,而显示的其他所有内容都是子进程(以及彼此的兄弟姐妹)。

      【讨论】:

      • 谢谢!这使问题很清楚。但是,getopt(和其他一些非内置程序)如何设法将变量导出到外部上下文? (例如getopt 导出$OPTIND
      • 你混淆了外部的/usr/bin/getopt,它不会也不能这样做,而内置的getopts会这样做。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多