【问题标题】:Using PHP functions in .env (dotenv) file在 .env (dotenv) 文件中使用 PHP 函数
【发布时间】: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。

【问题讨论】:

    标签: php laravel phpdotenv


    【解决方案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 中,情况发生了变化。
    猜你喜欢
    • 1970-01-01
    • 2015-08-19
    • 2018-06-05
    • 2021-11-08
    • 2020-01-31
    • 2021-02-19
    • 2017-03-30
    • 2020-03-07
    • 2021-05-20
    相关资源
    最近更新 更多