【问题标题】:getenv() is working in browser but not in command linegetenv() 在浏览器中工作,但不在命令行中
【发布时间】:2019-10-10 06:12:30
【问题描述】:

在我的服务器上,我将环境变量设置为“valueOfMyVariable”。我的问题是,如果我在命令行中运行文件,getenv() 返回 false,但如果我从浏览器运行它,则返回 true。

<?php var_dump( getenv('myEnvVariable') ) ?>

从命令行 (php myfilename.php) 运行此代码将返回 'false'

从浏览器运行此代码返回'valueOfMyVariable'.

我希望这两个电话都能得到'valueOfMyVariable'

有谁知道为什么在第一种情况下,我有 false 而不是我的变量?该问题是否来自配置问题?

如果我不够清楚,请随时要求精确,问题很简单,但很难正确解释,因为英语不是我的主要语言。

【问题讨论】:

  • 要检查变量的大小写。
  • @JasonK 如果您的意思是在 switch 情况下检查变量,通过在命令行中运行脚本,我总是以默认情况结束,而不是 getenv('myEnvVariable') == 'valueOfMyVariable' 情况。它可以在浏览器中正常工作。
  • 取决于操作系统,getenv() 并不总是不区分大小写。 '路径' != '路径'

标签: php linux command-line


【解决方案1】:

听起来您没有在终端会话中导出环境变量。

export myEnvVariable=someValue
php myfilename.php

它可能在浏览器中工作,因为网络服务器正在设置环境变量。

【讨论】:

  • 它工作正常,谢谢。 :) 有没有办法将它保存在服务器“内存”上?否则每次启动 ssh 会话时,我都必须重新编写导出行。
  • 不,这不是环境变量的工作方式。环境是您从调用进程继承的一组变量。
  • 这是否意味着从服务器 crontab 调用的文件也无权访问该环境变量?
  • 是的,没错。环境变量通常在 shell 启动脚本中设置,例如 .bashrc.profilecron 不会自动运行这些脚本。
  • 通常的程序是将变量设置放入您使用includerequire 加载的PHP 脚本中。
猜你喜欢
  • 1970-01-01
  • 2013-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
相关资源
最近更新 更多