【问题标题】:PHP, getenv() ignores trailing spacePHP,getenv() 忽略尾随空格
【发布时间】:2017-11-20 16:10:59
【问题描述】:

我在 .env 文件中有一个带有尾随空格的变量(是的,它是必需的)。不过,函数getenv() 不会返回带有尾随空格的字符串,而是对其进行修剪。

变量如下所示:

KEY="blabla. " 

有什么解决办法吗?

【问题讨论】:

  • 尝试定义为 KEY='blabla. ' - 使用单引号
  • 是的,也试过了,仍然修剪它
  • 一个愚蠢的方法:使用另一个你不需要的字符然后替换它:KEY="blabla.%20"str_replace('%20', ' ', getenv('KEY');
  • 不理想,但这会起作用。如果你想发布它,我会接受它。谢谢!
  • PHPs getenv() 实际上并没有修剪。其他事情正在发生。我高度怀疑您正在使用一些框架来读取 .env 文件并将值存储在环境中,这就是修剪发生的地方

标签: php environment-variables


【解决方案1】:

为了补充cbaconnier 的正确答案,这里有更多信息。 PHP 的 getenv() function 修剪值:

$ FOO='bar  ' php -r 'echo getenv("FOO") . "EOL";'
bar  EOL

如果项目(或运行它的框架)使用流行的PHP dotenv 库从文件加载环境变量,请注意,该库当前在从文件中加载环境变量值时会修剪环境变量值一份文件。从未合并启用此行为配置的pull request

为了更安全地替代str_replace(),请在值周围使用嵌套引号,然后在trim() 引号中使用:

FOO="'bar  '"
$foo = trim(getenv('FOO'), "'"); 

如果环境变量值包含传递给str_replace() 的搜索字符串(除了值的末尾),这种方法可以避免破坏环境变量值的风险。

【讨论】:

  • 你说的很对,其实用的是php dotenv库。我没有意识到这一点。这个解决方案看起来也更干净,谢谢。
【解决方案2】:

正如我在 cmets 中回答的那样,您可以通过使用另一个不需要的字符以愚蠢的方式实现这一点,然后替换它:

.env 文件:

KEY="blabla.%20" 

config.php

$key = str_replace('%20', ' ', getenv('KEY'));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 2021-03-25
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多