在 .env (dotenv) 文件中使用 PHP 函数

Posted

技术标签:

【中文标题】在 .env (dotenv) 文件中使用 PHP 函数【英文标题】:Using PHP functions in .env (dotenv) file 【发布时间】:2015-12-11 17:26:12 【问题描述】:

我正在尝试在 .env 文件中使用 php 函数,在我的例子中是 rand()

这是我想要在 .env 中实现的目标;

PROTOCOL="http"
DOMAIN="example.com"
URI="www.$DOMAIN"
RAND=rand(1,5)
CDN_URI="cdn$RAND.$DOMAIN"
CDN_URL="$PROTOCOL://$CDN_URI"

如您所见,我正在尝试生成从 1 到 5 的随机整数,它们代表 CDN 子域,以便在一个请求中我会得到 http://cdn2.example.com 和另一个 http://cdn4.example.com 等等。

我猜想在 .env 中使用 PHP 并不受本机支持,但有什么办法/解决方法吗?

附:我正在使用 Laravel 5。

【问题讨论】:

【参考方案1】:

.env 文件,作为纯文本,不支持 PHP 函数。该文件被设计为您的环境变量(来自操作系统)的后备,因此您不能在其上使用 PHP 代码。如果你真的需要一个全局随机数,你可以使用一个全局变量来做类似的事情,而不是:

global $rand;
$rand = rand(1,5);

然后你需要在主上下文之外使用你的号码(比如内部函数),你需要声明global $rand

function someFunction ()

    global $rand;
    doSomethingWithRand($rand);

但在我看来,这是一种丑陋的做法。根据您要达到的目标,有更好的方法来做到这一点。

更新

由于您使用的是 Laravel。您可以在 /config/ 目录下的某些配置文件中添加对 rand() 函数的调用,例如:'rand' => rand(1,5),。然后要访问您的随机数,您应该使用:

// If your config was set inside /config/app.php.
config('app.rand');

// OR

// If your config was set inside /config/services.php, for instance.
config('services.rand');

参考:http://laravel.com/docs/5.1/installation#accessing-configuration-values

【讨论】:

这是唯一可行的解​​决方案 atm。谢谢你的解释。 这是一个写得很好的答案。我不知道它是否有效,但我还是要投赞成票,先生。【参考方案2】:

您可以通过使用类似这样的良好语法在您的环境文件中使用 PHP:

<?php
return array(
    'PROTOCOL' => "http",
    'DOMAIN' => "example.com",
    'URI' => "www.$DOMAIN",
    'RAND' => rand(1,5),
    'CDN_URI' => "cdn$RAND.$DOMAIN",
    'CDN_URL' => "$PROTOCOL://$CDN_URI",
);

【讨论】:

在尝试运行此代码时会出现解析错误。您的数组缺少 &gt; 以将值与键关联,如下所示:'PROTOCOL' =&gt; "http", 谢谢!初学者的错误! 好吧,它没有用。我收到错误 500。我猜 PHP 代码无法在 .env 中工作,正如@GustavoStraube 提到的那样。 我实际上使用了一个与 Laravel 4 类似的 .env。它可以工作。 哦,那我猜在 Laravel 5 中,情况发生了变化。

以上是关于在 .env (dotenv) 文件中使用 PHP 函数的主要内容,如果未能解决你的问题,请参考以下文章

无法读取Dotenv.php中的“../.dev.env”环境文件:symfony

如何使用 PHP 执行 sed -i '/^MAIL_DRIVER=/s/=.*/=log/' .env 之类的东西来更新 laravel dotenv 文件中的变量值

使用 Python 和 dotenv 更改保存在 .env 文件中的环境变量

如何为 dotenv 获取特定于环境的 .env 文件(在 Laravel 5 中)

dotenv 是什么 怎么使用

如何将私钥内容放入 dotenv .env 文件中以用于 lumen 应用程序?