我试图找出为什么我的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文件中的每个变量.
我有一个.env包含我的数据库连接详细信息的文件,正如Laravel 5一样.我想覆盖这些用于测试,我可以做phpunit.xml.然而,这样做似乎违背了.env不提交环境配置,特别是密码的哲学.
有没有可能有类似的东西,.env.testing并告诉phpunit.xml从中读取?
这个问题只发生在我的共享主机上的 Laravel 5.8 上。
它在我与 Laravel 5.7 的共享主机中运行良好。
它在我的本地环境中使用 Laravel 5.8 运行良好。
问题是:
每次我运行 php artisan 命令(仅在我与 Laravel 5.8 的共享主机上)时,我都会收到此错误
环境文件无效!由于名称无效,无法解析 dotenv 文件。
在 [APP_NAME] 上失败。
我的 .env 第一行是: APP_NAME=rased
更新到 Laravel 5.8 后,我的网站也变成了一个白色的空白页面!
是用什么区别env('APP_ENV'),config('app.env')或者App::environment()导致某些应用环境?
我知道env('APP_ENV')意志$_ENV,config('app.env')读取配置,App::environment()是所有的抽象.在我看来,优势甚至是这个.抽象.
我不知道是否存在其他差异,例如性能水平或安全性
我正在使用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) 我正在为客户的项目使用 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中,*.ini文件可以通过使用来读取parse_ini_file().但是,各种框架(包括Laravel)选择引入一个单独的库来解析环境文件.
使用这个"dotenv"解决方案而不是ini文件和内置PHP函数的原因是什么?
大家好,我很困惑,我不知道我做错了什么,这告诉我 致命错误: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; 但它也不起作用。
我正在尝试在 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
我在使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)
就像这里的线程中建议的那样
有谁知道可能出什么问题?
phpdotenv ×10
php ×7
laravel ×6
laravel-5 ×2
phpunit ×2
dotenv ×1
ini ×1
laravel-5.8 ×1
lumen ×1
namespaces ×1