如何从Laravel项目的根目录访问env文件?

3

我有一个位于Laravel项目根目录的php脚本。 我想要访问我的.env文件中的设置。


我已经尝试过

$dbname      = env('DB_DATABASE');
$user        = env('DB_USERNAME');
$host        = env('DB_HOST');
$pass        = env('DB_PASSWORD');

I got

PHP Fatal error:  Call to undefined function env()

有什么解决方法吗?我需要包含任何内容才能访问env()吗?


1
如果您正在编写原始的PHP脚本,那么您没有引导Laravel环境。没有加载配置文件,也没有可用的帮助函数。可能值得将您的脚本编写为Artisan控制台命令。 - jszobody
什么是Artisan控制台命令?你介意给我发送一个链接吗? - code-8
1
这是“artisan console command”的第一个谷歌搜索结果:https://laravel.com/docs/5.1/artisan - jszobody
这个简单的任务看起来很复杂,我将使用 php 并使用 str_pos() 从文件中读取。 - code-8
你需要将其作为控制台命令运行,或者将你的代码放在路由函数中,然后转到该路由以执行它。 - Jeff
6个回答

11
如果您只想在单独的PHP脚本中加载您的.env配置,您可以像这样操作:

如果您只想在单独的 PHP 脚本中加载您的 .env 配置,您可以按照以下步骤进行:

require_once "vendor/autoload.php";
Dotenv::load(__DIR__);

这将把你的.env配置加载到$_ENV数组中。

现在你可以像这样访问你的变量:

$dbname      = $_ENV['DB_DATABASE'];
$user        = $_ENV['DB_USERNAME'];
$host        = $_ENV['DB_HOST'];
$pass        = $_ENV['DB_PASSWORD'];

如果你真的想要那个env()辅助函数,就去获取那个文件:

require_once "vendor/laravel/framework/src/Illuminate/Foundation/helpers.php";

现在你也可以访问env('DB_DATABASE');

注意:这并不会给你一个 Laravel 引导环境。这只是一种简单的方法来获取你的.env配置变量而已。


这已经足够我所需要的了。 :) - code-8
请注意,不同版本的创建和加载 Dotenv 的语法略有不同。 例如,2.4 版本需要:     new Dotenv\Dotenv(__DIR__);     $dotenv->load(); 而 3.x 版本则需要:     $dotenv = Dotenv\Dotenv::create(__DIR__);     $dotenv->load();有关更多详情,请查看 Github readme 中的文档。您可以轻松地跳转到那里的版本标签。 - Thor Galle

5
Laravel使用vlucas/phpdotenv读取.env文件env()函数是Laravel的助手/快捷方式。要使用env命令,您必须要求供应商文件并创建一个app / kernel laravel对象。
<?php

require __DIR__.'/vendor/autoload.php';

$app = require_once __DIR__.'/bootstrap/app.php';
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);

\Dotenv::load($app->environmentPath(), $app->environmentFile());   
var_dump(env('DB_DATABASE'));

非常感谢! - code-8

1
这是截至2018年/Laravel 5.6的简单工作解决方案。
//assumes this script is in the root folder, same as .env
require_once "vendor/autoload.php";
(new \Dotenv\Dotenv(__DIR__))->load(); 

$count = $_ENV['UNICORN_COUNT'];

故障排除:
- 确保正确调用了Dotenv文件。
- 检查Dotenv->load()(和Dotenv->__constructor())并提供所需的参数。

1

看起来在 Laravel 9 中创建不起作用。之前的答案对我没有用,但帮助我找到了以下解决方案:



    require_once dirname(__DIR__, 2) . "/vendor/autoload.php";
    $dotenv = Dotenv\Dotenv::createImmutable(dirname(__DIR__, 2));
    $dotenv->load();
    $variable = env('VARIABLE');


0
使用最新版本的DotEnv,可以使用以下代码使用env()函数。
require_once "vendor/autoload.php";

$dotenv = Dotenv::create(__DIR__); // Dir where your .env file is located

$dotenv->load();

$dotenv->load(); 返回什么样的值?你应该告诉他如何在最后一步获取环境变量的值,因为这正是他想要实现的。 - Abdalla Arbab

0

我之前遇到过同样的问题,以下代码修复了它

require_once dirname($_SERVER['DOCUMENT_ROOT'])."/vendor/autoload.php";//fetch the document path and removes the public folder using diranme function
$dotenv= Dotenv::create(dirname($_SERVER['DOCUMENT_ROOT']));// Dir where your .env file is located
$dotenv=$dotenv->load();
$url=$dotenv["APP_URL"];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接