You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在脱离Laravel生命周期的独立脚本中加载.env变量

问题根因

Laravel能通过env()读取.env变量,本质是框架启动流程中会通过依赖的Dotenv组件把.env配置加载到PHP运行环境中。你直接访问public目录下的独立PHP脚本时,完全跳过了Laravel从入口文件public/index.php开始的整套启动流程,既没有加载环境变量,也没有初始化框架容器、服务绑定,自然既用不了env(),也调不通Laravel的相关工具。

方案1:需要调用Laravel工具时的标准实现

既然本身需要用到Laravel的能力,最省事也最符合框架逻辑的做法,就是在独立脚本开头手动引入Laravel的启动流程,和框架默认的public/index.php启动逻辑保持一致即可:

<?php
// public目录下的脚本,通过相对路径定位到项目根目录的依赖文件
require __DIR__ . '/../vendor/autoload.php';

// 初始化Laravel应用实例
$app = require_once __DIR__ . '/../bootstrap/app.php';

// 启动HTTP核心,完成环境加载、配置注册、服务启动全流程
$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
$response = $kernel->handle(
    $request = Illuminate\Http\Request::capture()
);

// 从这里开始,可以和在框架路由里写代码一样,正常使用所有Laravel能力
// 读取环境变量
$apiKey = env('SOME_API_KEY');
// 调用模型、服务、门面、辅助函数都不受限
// $order = App\Models\Order::find(123);
// $cacheValue = cache('test_key');

// 脚本逻辑执行完成后,正常终止框架流程即可
$kernel->terminate($request, $response);
方案2:仅需读取env变量的轻量实现

如果不需要调用Laravel的其他工具,只是想拿到.env里的配置,不用启动整个框架,直接用Laravel自带的Dotenv依赖单独加载.env文件即可:

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

// 加载项目根目录下的.env文件到环境变量
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__ . '/../');
$dotenv->load();

// 此时可以正常通过env()读取配置
$appEnv = env('APP_ENV');

安全提示:public目录是对外暴露的Web根目录,放在这里的独立脚本如果没有做严格的权限校验、访问限制,很容易引发未授权访问风险。如果不是必须对外通过URL直接访问,更推荐把这类专用脚本封装成Artisan命令,走CLI执行,安全性和可维护性都更好。

内容的提问来源于stack exchange,提问作者Martin Braun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 22:42:31