我的 laravel 5 应用程序中有几个子域,每个子域都有特定的配置,如 mail、nocaptcha 等。
如何设置 .env 文件以与我的特定子域一起使用?
我想使用该.env文件在Laravel 5.1中配置存储路径.我bootstrap/app.php看起来像这样:
<?php
$app = new \Illuminate\Foundation\Application(
realpath(__DIR__.'/../')
);
$app->useStoragePath(getenv('STORAGE_PATH'));
Run Code Online (Sandbox Code Playgroud)
.env文件中的相关行是:
STORAGE_PATH=/var/www/storage
Run Code Online (Sandbox Code Playgroud)
这不起作用.我发现在处理引导程序后初始化Dotenv库所以.env变量不可用bootstrap.php.
我可以设置存储路径并且.env变量可用吗?
当我升级到 Laravel 5 时,我开始使用 env 系统,在根目录下的文件中设置所有配置。
.env
DB_HOST=x.x.x.x.x
DB_USERNAME
...
Run Code Online (Sandbox Code Playgroud)
该文件不是我的存储库的一部分,当我部署时,我将相同的变量设置到我的系统环境变量中(此处使用 amazon beanstalk),因此无需 .env 文件即可访问它们。
这样一切都可以工作,但是现在当我在生产中的脚本中使用命令行时,这些系统环境变量似乎无法在命令行中访问。然而,当 PHP 通过 Web 服务器提供服务时,它们是可以访问的。
我发现如果我复制添加回这个 .env 文件,那么它可以在命令行中工作,但这就是我感到困惑的原因,我认为这个系统是为了防止将敏感信息提交到存储库,现在看来我必须这样做,这样我可以在生产中使用 php artisan migrate 和其他命令。
我错过了什么吗?有没有办法在命令行中获取可用的系统环境变量,或者我是否必须以某种方式在生产中动态创建该 .env 文件?
amazon-web-services amazon-elastic-beanstalk laravel-5 phpdotenv
我在codeigniter项目上使用composer从vlucas安装了phpdotenv。
我也添加了钩子,如果v3.3需要,我会感到困惑
$hook['pre_system'] = function() {
$dotenv = new Dotenv\Dotenv(APPPATH);
$dotenv->load();
};
Run Code Online (Sandbox Code Playgroud)
如果不添加此挂钩,则无法从.env文件中检索变量。如果我添加了它,则会出现此错误:
消息:传递给Dotenv \ Dotenv :: __ construct()的参数1必须是Dotenv \ Loader的实例,给定字符串,在第15行的C:\ xampp \ htdocs \ test \ application \ config \ hooks.php中调用
文件名:C:\ xampp \ htdocs \ test \ vendor \ vlucas \ phpdotenv \ src \ Dotenv.php
似乎正在加载该类,但它不喜欢参数“ APPPATH”,但是我发现的所有文档都使用了该类。
任何帮助表示赞赏
我想知道Laravel是否有办法指定要加载的一组env文件.我确切的问题是,我想补充一点像一个后缀为我所有.js和.css资源.理想情况下,我有一个类似于发布日期的后缀,因为这些文件可以在同一版本中缓存,但我希望缓存在下一个版本中失效.但是我希望尽可能避免读取,修改和保存.env文件,而是希望创建一个新文件,例如.env.rdate通过脚本生成的文件,例如
echo APP_RELEASE_DATE=`date +%s` > env.rdate
Run Code Online (Sandbox Code Playgroud)
或类似的东西.这是完全可能的,还是我必须读取/更新/写入.env文件?
我正在使用 Laravel 5.4 和vlucas/phpdotenv库。
我想将一个环境变量引用到其他环境变量,例如
APP_NAME: JUSTDOIT
SIGNUP_KEY: JUSTDOIT_SIGNUP
Run Code Online (Sandbox Code Playgroud)
在 SIGNUP_KEY 中,我想使用任何 APP_NAME。
我想根据我的环境拥有动态播种机。(例如,在测试中我只想要种子 100 行,而本地则是 10'000)。
我在配置中创建了 seeder.php,它从 .env 文件调用值。
当我在我的播种机中使用配置时,它返回一个字符串,该字符串应该是一个整数。例如:
.env.local:
SEED_USER_COUNT=10000
Run Code Online (Sandbox Code Playgroud)
配置\播种机.php:
return [
'user_count' => env('SEED_USER_COUNT', 10),
];
Run Code Online (Sandbox Code Playgroud)
用户播种机
factory(User::class, config('user_count'))->create();
Run Code Online (Sandbox Code Playgroud)
以上无法正常工作,似乎config('user_count')返回一个字符串"10000"而不是整数10000
I started a project using composer and donlowaded the package vlucas/phpdotenv. I would like to call the $_ENV['name'] for example in my whole project without needing to instantiate the dot env in every class like that:
$dotenv = Dotenv::createImmutable(__DIR__);
$dotenv->load();
Run Code Online (Sandbox Code Playgroud)
How can I achieve that like a laravel framework does for example?
Another question is I tough I needed to import my autoload require __DIR__.'/../vendor/autoload.php'; in order to call use Dotenv\Dotenv;...
我如何在类中使用 Dotenv 而不需要自动加载?
编辑添加index.php:
<?php
use Dotenv\Dotenv;
require …Run Code Online (Sandbox Code Playgroud) 我有一个小的控制台命令,我想在其中读取一些环境变量,但它似乎没有从.env控制台中的文件或服务器配置中读取变量(php 文件有效)
代码
protected function execute(InputInterface $input, OutputInterface $output)
{
$io = new SymfonyStyle($input, $output);
$debug = $input->getArgument('debug') === 'y' ? true : false;
$this->project = $input->getArgument('project');
$start = new DateTime();
$debug ? $io->text('<fg=green>Starting upload</>') : null;
dump(getenv('APP_ENV'));
dump(getenv('MAILER_USERNAME'));
die;
...
}
Run Code Online (Sandbox Code Playgroud)
要测试的命令
php bin/console app:make-backup
输出:
Starting upload
false
false
Run Code Online (Sandbox Code Playgroud)
php bin/console app:make-backup --env=prod
输出:
Starting upload
"prod"
false
Run Code Online (Sandbox Code Playgroud)
php bin/console app:make-backup --env=dev
输出:
Starting upload
"dev"
false
Run Code Online (Sandbox Code Playgroud)
.env 文件
APP_ENV=dev
MAILER_USERNAME=info@xxx.com
Run Code Online (Sandbox Code Playgroud)
我不明白我哪里做错了?nginx 和 apache 服务器上存在问题,但getenv('MAILER_USERNAME') …
我在PhpStorm终端中.env使用copy .env.example .env命令生成了新文件.然后创建了.env文件,但我无法在PhpStorm中编辑.当我双击它时,打开外部编辑器(Notepad ++).
我正在使用Maatwebsite 的 Laravel-Excel导入包含两张表的 Excel 文件。该文件是由另一个系统生成的;我无法改变它的制作方式。
在第一张纸上,第一行是列标题。这很好用。
...但第二张纸有两行不需要的文本,然后是第三行的标题。
我可以设置config(['excel.import.startRow' => 3])从第三行开始导入,但这意味着我错过了第一张表中的前两行有用数据。
config(['excel.import.startRow' => 3]);
$sheets = $import->all();
Run Code Online (Sandbox Code Playgroud)
有什么办法可以将excel.import.startRow第一张纸设置为 1,而将excel.import.startRow另一张纸设置为 3 吗?
我正在尝试设置一个数据库环境来测试我的 Doctrine ORM 实体类,而不更改我的真实数据库。
我遵循了Symfony 的文档,但是当我运行时php bin/console doctrine:fixtures:load我收到警告:
小心,数据库“图表”将被清除。你想继续吗?(是/否)[否]:
尽管我已经在我的.env.test文件中设置了一个环境变量:
DATABASE_URL=mysql://testUser:testPassword@127.0.0.1/graph_test
编辑:这是整个.env.test文件:
# define your env variables for the test env here
KERNEL_CLASS='App\Kernel'
APP_SECRET='$ecretf0rt3st'
SYMFONY_DEPRECATIONS_HELPER=999999
PANTHER_APP_ENV=panther
# Database test
DATABASE_URL=mysql://testUser:testPassword@127.0.0.1/graph_test
Run Code Online (Sandbox Code Playgroud)
我尝试更改我的test/bootstrap.php文件,但收到相同的警告。
DATABASE_URL有没有办法告诉原则从文件中获取值.env.test?任何帮助将不胜感激。
PS 不需要多个测试 .env 文件。
我是瘦框架的新手。我会尝试在根文件夹项目中添加 .env 文件,然后我想访问 .env 文件中的值。我试过使用这个包https://github.com/vlucas/phpdotenv并在 index.php 中加载 .env。但是当我尝试获取 .env 文件中的值时,使用像 ex: getenv("DB_NAME") 它返回 false。不返回 DB_NAME 的字符串值。
.env
DB_HOST = localhost
DB_PORT = 3306
DB_NAME = DB
DB_USER = root
DB_PASSWORD =
Run Code Online (Sandbox Code Playgroud)
索引.php
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();
Run Code Online (Sandbox Code Playgroud)
我使用纤薄的框架 ^4.*、Web 服务器 laravel 代客、数据库 MySQL。或者还有其他替代方法可以在超薄框架中配置 .env 吗?谢谢你。
phpdotenv ×13
php ×7
laravel ×6
laravel-5 ×4
symfony ×2
autoload ×1
codeigniter ×1
doctrine-orm ×1
dotenv ×1
frameworks ×1
phpstorm ×1
phpunit ×1
slim ×1