frankenphp v1.3在macos上不自动加载.env文件,需手动集成:可通过frankenphp.yaml静态注入、dotenv-cli shell wrapper预加载,或在index.php中用vlucas/phpdotenv手动加载。

在macOS上运行FrankenPHP v1.3时,它默认不会自动加载项目根目录下的.env文件——这和Laravel或Symfony等PHP框架不同,FrankenPHP本身不内置dotenv解析器。
确认FrankenPHP启动方式
FrankenPHP v1.3在macOS上通常通过frankenphp serve命令启动,该命令会读取当前目录下frankenphp.yaml或frankenphp.json配置文件;【.env文件不会被自动读取,必须显式集成】。
如果你直接执行php -S localhost:8000或用其他PHP内置服务器启动,则FrankenPHP根本未参与,此时环境变量行为与FrankenPHP无关。
方法一:通过frankenphp.yaml注入环境变量
在项目根目录创建或编辑frankenphp.yaml,添加env字段:
```yaml
env:
APP_ENV: development
DB_HOST: localhost
```
这种方式适合固定值,但无法动态读取.env文件内容;每次修改.env都要同步更新frankenphp.yaml,维护成本高。
方法二:用shell wrapper预加载.env(推荐)
第一步:确保已安装dotenv CLI工具:brew install dotenv-cli。
第二步:创建可执行脚本start-frankenphp.sh,内容如下:
```bash
#!/bin/bash
dotenv run -- php vendor/bin/frankenphp serve
```
第三步:赋予执行权限:chmod +x start-frankenphp.sh。
第四步:运行:./start-frankenphp.sh。
这一步依赖dotenv-cli在进程启动前将.env中的键值对注入当前shell环境,FrankenPHP子进程即可继承这些变量;【必须确保.frankenphp.sh与.env在同一目录,且.env文件权限为600或644】。
方法三:在PHP代码中手动加载Dotenv
安装vlucas/phpdotenv:composer require vlucas/phpdotenv。
在项目入口文件(如public/index.php)最顶部插入:
```php
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__.'/..');
$dotenv->load();
```
注意:FrankenPHP的请求生命周期中,每个请求都会重执行index.php,因此此方式安全有效;但若使用SAPI模式(如frankenphp-worker),需确保load()只调用一次,避免重复定义。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











