【问题标题】:How to get Environment Variable from Shell in PHP/phpinfo()如何在 PHP/phpinfo() 中从 Shell 获取环境变量
【发布时间】:2016-11-10 13:25:13
【问题描述】:

我正在尝试使用 SendGrid 的 API,我需要使用以下命令访问已添加到根目录的环境变量。

echo "export SENDGRID_API_KEY='YOUR_API_KEY'" > sendgrid.env
echo "sendgrid.env" >> .gitignore
source ./sendgrid.env

这在我的根文件夹中创建了一个sendgrid.env 文件,将sendgrid.env 添加到我的.gitignore 文件中,并将SENDGRID_API_KEY 添加为环境变量。

但是,PHP 的 getenv('SENDGRID_API_KEY') 键没有返回任何内容,并且 PHP 的 phpinfo() 没有将 SENDGRID_API_KEY 反映为环境变量。

这里是API installation instructions

【问题讨论】:

  • 为什么你认为 PHP 应该读取你的 sendgrid.env 文件?你试过用putenv()吗?
  • 嗨鲁斯兰。我不认为它应该,我知道它不是。但是,我认为它应该能够读取环境变量,因此是 source ./sendgrid.env 命令。我只是按照 API 说明进行操作,他们没有说任何关于 putenv 的内容。我已经添加了问题的链接。除了这个小部分之外,安装相当简短。

标签: php environment-variables getenv


【解决方案1】:

暗示您应该使用另一个包来读取.env 文件。他们的官方网站上有一个sample,它使用Dotenv 类将文件内容加载到环境中:

<?php

require 'vendor/autoload.php';
Dotenv::load(__DIR__);
$sendgrid_apikey = getenv('YOUR_SENDGRID_APIKEY');

不过,他们甚至没有解释这个类的来源。显然,他们的意思是你应该安装vlucas/phpdotenv 包。注意,在这个包的当前版本中,load 方法是非静态的(实际上是was static in early versions):

$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();

【讨论】:

  • _ 我是初学者。我永远也想不通....您还有其他建议可以在不参考软件包的情况下解决此问题吗?如果在一天结束时,您正在阅读 .env 文件,那么运行 source ./sendgrid.env 有什么意义。我非常感谢您的帮助。 +1(很快就会被标记为答案)。
  • 我认为你根本不必使用环境变量,除非你觉得它们很方便。构造函数接受一个字符串,如何获取该键取决于您。我习惯使用.gitignore 中包含的配置文件。另一种方法是制作一个像YOUR_SENDGRID_KEY='123abcdef...' php yourscript-calling-getenv.php 这样的shell 包装器,如果它是一个CLI 脚本的话。如果脚本应该在另一个 SAPI(例如 FPM 或 apache)中运行,您可以调整网络服务器以传递特定的 env。变量到所有 PHP 脚本,或特定目录中的 PHP 脚本。这一切都取决于具体的任务
  • 谢谢鲁斯兰。超级有帮助。有趣的是,这正好出自 phpdotenv 的自述文件“phpdotenv 是为开发环境而设计的,通常不应该在生产环境中使用。在生产环境中,应该设置实际的环境变量,以便没有加载 .env 的开销每个请求的文件。"。我想,由于我只处理生产代码,我本可以继续使用真正的密钥,但这是关于如何在协作时更好地安全共享代码的宝贵课程。
猜你喜欢
  • 1970-01-01
  • 2011-09-20
  • 2015-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2011-01-05
  • 2015-11-22
相关资源
最近更新 更多