在 .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",
);
【讨论】:
在尝试运行此代码时会出现解析错误。您的数组缺少>
以将值与键关联,如下所示:'PROTOCOL' => "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 文件中的环境变量