在Laravel app之外访问.env变量

时间:2015-10-20 10:55:35

标签: php amazon-s3 laravel-5 ckeditor ckfinder

我整合了ckeditor with ckfinder 3,可以在Amazon S3云上存储文件。

在我的ckfinder config.php文件中,位于public/assets/plugins/ckfinder我已经硬编码了与云建立连接所需的密钥,密钥,存储桶和区域。

但我想从.env文件中获取配置项。

到目前为止,我在ckfinder的config.php中尝试了这个:

require $_SERVER['DOCUMENT_ROOT'].'/../bootstrap/autoload.php';
$app = require $_SERVER['DOCUMENT_ROOT'].'/../bootstrap/app.php';
var_dump($app->environment('S3_KEY');

但是这失败并出现错误:Fatal error: Uncaught exception 'ReflectionException' with message 'Class env does not exist' in /home/vagrant/projects/dk/vendor/laravel/framework/src/Illuminate/Container/Container.php on line 779

所以问题是,如何在Laravel应用程序之外访问环境变量?

谢谢!

3 个答案:

答案 0 :(得分:2)

我发现这个解决方案的Laravel 5.x带有phpdotenv包,由composer require vlucas/phpdotenv安装:

require __DIR__.'/../vendor/autoload.php'; //Load composer autoload
$dot = new \Dotenv\Dotenv(__DIR__.'/../'); //Location of .env
$dot->load(); //Load the configuration (Not override, for override use overload() method
$url = getenv('APP_URL'); // Get var value

答案 1 :(得分:1)

我也很难做到这一点。我不确定这是否是最好的方法,但它确实有效。

  1. 需要自动加载器
  2. 将.env文件加载到Dotenv
  3. 引用您的变量
  4. 以下是代码:

    // update the paths depending on where the script is
    require_once __DIR__.'/../bootstrap/autoload.php'; 
    Dotenv::load(__DIR__.'/..');
    $dbHost = Dotenv::findEnvironmentVariable('DB_HOST');
    

答案 2 :(得分:0)

<?php
$_ENV = array();
$handle = fopen(".env", "r");
if($handle) {
    while (($line = fgets($handle)) !== false) {
      if( strpos($line,"=") !== false) {
        $var = explode("=",$line);
        $_ENV[$var[0]] = trim($var[1]);
        }
    }
    fclose($handle);
} else { die('error opening .env'); }
?>