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

在.env(dotenv)文件中使用PHP函数,php,laravel,phpdotenv,Php,Laravel,Phpdotenv,我试图在.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.exampl

我试图在.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。

您可以在环境文件中使用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}",
);

作为纯文本的
.env
文件不支持PHP函数。该文件被设计为您的环境变量(来自操作系统)的回退,因此您不能在该文件上使用PHP代码。如果确实需要全局随机数,则可以使用全局变量执行类似操作:

global $rand;
$rand = rand(1,5);
然后,如果需要在主上下文之外使用数字(如在函数内部),则需要声明
global$rand

function someFunction ()
{
    global $rand;
    doSomethingWithRand($rand);
}
但在我看来,这是一种丑陋的做法。根据你想要达到的目标,有更好的方法

更新 因为你用的是拉威尔。您可以在一些配置文件的
/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');

参考:

在尝试运行此代码时,您将得到一个解析错误。您的数组缺少将值与键关联的
,如下所示:
'PROTOCOL'=>“http”,
。谢谢!贝金纳的错误!嗯,它不起作用。我得到了错误500。我猜PHP代码不会像@GustavoStraube提到的那样在.env中工作。实际上,我使用了一个与Laravel4类似的.env。这是可行的。哦,我想在拉威尔5号,情况已经改变了。这是唯一可行的解决方案。谢谢你的解释。这是一个很好的书面回答。我不知道它是否有效,但我还是要投赞成票,先生。