标签: phpdotenv

Laravel 5.3 - env()始终返回null

我试图找出为什么我的env()助手总是回来null.这会导致问题,特别是在app.php文件中,env()默认情况下广泛使用的助手.也许任何神秘的服务器设置?

我的环境文件:

APP_ENV=production
APP_KEY=base64:mymagickey=
APP_DEBUG=false
APP_LOG_LEVEL=info
APP_URL=http://www.example.com

etc...
Run Code Online (Sandbox Code Playgroud)

编辑 - 我试过以下:

php artisan cache:clear
php artisan view:clear
php artisan config:cache
Run Code Online (Sandbox Code Playgroud)

当然,我正在使用这样的env帮手:env('APP_ENV')

但仍然没有成功.奇怪的是,$_ENVphp变量包含.env文件中的每个变量.

php environment-variables laravel phpdotenv

39
推荐指数
8
解决办法
3万
查看次数

如何在Laravel 5中为phpunit指定不同的.env文件?

我有一个.env包含我的数据库连接详细信息的文件,正如Laravel 5一样.我想覆盖这些用于测试,我可以做phpunit.xml.然而,这样做似乎违背了.env不提交环境配置,特别是密码的哲学.

有没有可能有类似的东西,.env.testing并告诉phpunit.xml从中读取?

php phpunit laravel laravel-5 phpdotenv

22
推荐指数
5
解决办法
2万
查看次数

Laravel 5.8,工匠命令错误:由于名称无效,无法解析 dotenv 文件

这个问题只发生在我的共享主机上的 Laravel 5.8 上。

它在我与 Laravel 5.7 的共享主机中运行良好。

它在我的本地环境中使用 Laravel 5.8 运行良好。

问题是:

每次我运行 php artisan 命令(仅在我与 Laravel 5.8 的共享主机上)时,我都会收到此错误

环境文件无效!由于名称无效,无法解析 dotenv 文件。

在 [APP_NAME] 上失败。

我的 .env 第一行是: APP_NAME=rased

更新到 Laravel 5.8 后,我的网站也变成了一个白色的空白页面!

shared-hosting laravel-5.8 laravel-artisan phpdotenv

15
推荐指数
5
解决办法
2万
查看次数

使用env('APP_ENV'),config('app.env')或App :: environment()来获取应用环境有什么区别?

是用什么区别env('APP_ENV'),config('app.env')或者App::environment()导致某些应用环境?

我知道env('APP_ENV')意志$_ENV,config('app.env')读取配置,App::environment()是所有的抽象.在我看来,优势甚至是这个.抽象.

我不知道是否存在其他差异,例如性能水平或安全性

environment-variables laravel laravel-5 phpdotenv

13
推荐指数
3
解决办法
2万
查看次数

dotenv在生产时需要.env文件

我正在使用dotenv for PHP来管理环境设置(不是lavarel但我标记了它因为lavarel也使用了dotenv)

我已从代码库中排除了.env,并为所有其他协作者添加了.env.example

在dotenv的github页面上:

phpdotenv适用于开发环境,通常不应用于生产环境.在生产中,应该设置实际的环境变量,以便在每个请求上加载.env文件没有开销.这可以通过使用Vagrant,chef或Puppet等工具的自动部署流程来实现,也可以通过Pagodabox和Heroku等云主机手动设置.

我不明白的是我得到以下异常:

PHP Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Dotenv: Environment file .env not found or not readable.

这与文档中所说的"应该设置实际环境变量以便在每个请求上加载.env文件没有开销"相矛盾.

所以问题是,是否有任何理由为什么dotenv抛出异常和/或我错过了什么?首先,与其他dotenv库(ruby)相比,行为是不同的

我可以轻松地解决这个问题,不太好的解决方案:

if(getenv('APPLICATION_ENV') !== 'production') { /* or staging */
    $dotenv = new Dotenv\Dotenv(__DIR__);
    $dotenv->load();
}
Run Code Online (Sandbox Code Playgroud)

在我看来最好的解决方案,但我认为dotenv应该处理这个问题.

$dotenv = new Dotenv\Dotenv(__DIR__);
//Check if file exists the same way as dotenv does it
//See classes DotEnv\DotEnv and DotEnv\Loader
//$filePath = $dotenv->getFilePath(__DIR__); 
//This method is protected so extract code from method (see below)

$filePath = rtrim(__DIR__, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR …
Run Code Online (Sandbox Code Playgroud)

php environment-variables production-environment phpdotenv

10
推荐指数
1
解决办法
2万
查看次数

Laravel 环境变量(没有在方法中传递默认值)在 Artisan 命令文件中不起作用

我正在为客户的项目使用 Laravel 6.x,其中我在 Artisan Command 中构建了一个 API 用于同步数据。

现在,客户希望配置谨慎,远离主要源代码,并且尽可能没有任何后备值。这意味着我必须在文件中定义配置.env并使用env()没有任何后备默认值的方法。

env这在 Laravel Artisan 命令类文件中必须是可能的,但是当我在代码中使用该方法时,它无法按预期工作,如下所示:

[站点根目录]\.env:

APP_ENV=local
Run Code Online (Sandbox Code Playgroud)

[siteroot]\app\Console\Commands\SyncSomeData.php:

use Illuminate\Console\Command;

class SyncSomeData extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'sync:some-data';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    { …
Run Code Online (Sandbox Code Playgroud)

php environment-variables laravel dotenv phpdotenv

8
推荐指数
1
解决办法
5596
查看次数

为什么使用dotenv库而不是解析ini文件?

在PHP中,*.ini文件可以通过使用来读取parse_ini_file().但是,各种框架(包括Laravel)选择引入一个单独的库来解析环境文件.

使用这个"dotenv"解决方案而不是ini文件和内置PHP函数的原因是什么?

php ini phpdotenv

7
推荐指数
1
解决办法
708
查看次数

致命错误:找不到类“Dotenv\Dotenv”

大家好,我很困惑,我不知道我做错了什么,这告诉我 致命错误:Class 'Dotenv\Dotenv' not found in

但我不明白为什么..

$dotenv = new \Dotenv\Dotenv(dirname(dirname(dirname(dirname(__DIR__)))));
$dotenv->load();
Run Code Online (Sandbox Code Playgroud)

我的结构是下一个,在文件 index.php 是我调用 Dotenv 的地方,我也使用过使用 Dotenv\Dotenv; 但它也不起作用。

在此处输入图片说明

php namespaces phpdotenv

7
推荐指数
3
解决办法
3万
查看次数

dotenv 和 Elastic Beanstalk - 环境文件 .env 未找到或不可读

我正在尝试在 Amazon Elastic Beanstalk 中上传 Lumen 项目。

.env 在 .gitignore 中。

这没关系,因为我有几个环境(dev、qa、prod),所以我需要为每个环境配置单独的 env 变量

我收到此错误消息:

 Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Dotenv: Environment file .env not found or not readable. Create file with your environment settings at /var/app/current/bootstrap/../.env' in /var/app/current/vendor/vlucas/phpdotenv/src/Dotenv.php:33 Stack trace: #0 /var/app/current/bootstrap/app.php(4): Dotenv::load('/var/app/curren...') #1 /var/app/current/public/index.php(13): require('/var/app/curren...') #2 {main} thrown in /var/app/current/vendor/vlucas/phpdotenv/src/Dotenv.php on line 33
Run Code Online (Sandbox Code Playgroud)

我知道系统没有找到 .env

事情是我在 Amazon Console 中设置了变量:

Software Configuration
Environment variables: APP_ENV, DB_USERNAME, DB_PASSWORD, DB_DATABASE,  DB_HOST, APP_KEY
Run Code Online (Sandbox Code Playgroud)

eb 打印环境:

 Environment Variables:
  DB_DATABASE = ebdb …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services laravel amazon-elastic-beanstalk lumen phpdotenv

6
推荐指数
1
解决办法
1610
查看次数

Laravel PHPUnit加载.env.testing文件

我在使Laravel为测试用例加载正确的.env文件时遇到一些问题。我正在使用PHPUnit,并在phpunit.xml中设置了以下变量:

<?xml version="1.0" encoding="UTF-8"?>
    <phpunit backupGlobals="false"
     backupStaticAttributes="false"
     bootstrap="bootstrap/autoload.php"
     colors="true"
     convertErrorsToExceptions="true"
     convertNoticesToExceptions="true"
     convertWarningsToExceptions="true"
     processIsolation="false"
     stopOnFailure="false">
    <testsuites>
        <testsuite name="Application Test Suite">
            <directory suffix="Test.php">./tests</directory>
        </testsuite>
    </testsuites>
    <filter>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php">./app</directory>
            <exclude>
                <file>./app/Http/routes.php</file>
            </exclude>
        </whitelist>
    </filter>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="DB_CONNECTION" value="sqlite"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="QUEUE_DRIVER" value="sync"/>
    </php>
</phpunit>
Run Code Online (Sandbox Code Playgroud)

在我的.env.testing文件中,我有:

APP_ENV=testing
DB_CONNECTION=sqlite
Run Code Online (Sandbox Code Playgroud)

我在config / database.php下建立了他的连接:

'sqlite' => [
     'driver' => 'sqlite',
     'database' => ':memory:',
     'prefix' => ''
]
Run Code Online (Sandbox Code Playgroud)

它只是没有加载.env.testing文件。如果我在TestCase.php中这样做:

dd(env('APP_ENV'));
Run Code Online (Sandbox Code Playgroud)

我仍然从我的.env文件中获得“发展”

我也尝试过使用:

$app->loadEnvironmentFrom('.env.testing');
Run Code Online (Sandbox Code Playgroud)

就像这里的线程中建议的那样

有谁知道可能出什么问题?

php phpunit laravel phpdotenv

6
推荐指数
1
解决办法
2340
查看次数