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

使用Docker-Compose搭建WordPress本地环境遇Dotenv致命错误求助

解决PHP Dotenv构造函数类型错误问题

看起来你踩了phpdotenv版本升级的API变更坑,我来帮你拆解下问题和解决方案:

问题根本原因

你使用的是vlucas/phpdotenv:^3.4,但你的代码(/var/www/config/application.php第8行)还是沿用了旧版本的初始化方式:

new Dotenv\Dotenv('/var/www');

而phpdotenv 3.x版本已经彻底修改了构造函数的参数要求——不再接受字符串路径,而是需要传入Dotenv\Loader实例,这才导致了这个类型错误。

具体修复步骤

1. 修改Dotenv初始化代码

打开/var/www/config/application.php,把第8行的初始化代码替换成3.x版本的正确写法:

// 推荐使用不可变模式(环境变量无法覆盖.env里的配置)
$dotenv = Dotenv\Dotenv::createImmutable('/var/www');
$dotenv->load();

// 如果需要允许系统环境变量覆盖.env配置,改用这个:
// $dotenv = Dotenv\Dotenv::createMutable('/var/www');
// $dotenv->load();

确保路径/var/www是你.env文件所在的目录,根据你的描述这个路径是正确的。

2. 确认.env文件位置与权限

  • 检查.env文件确实放在/var/www目录下,和初始化时指定的路径匹配
  • 进入容器验证文件权限(避免PHP进程无法读取):
    # 替换成你的容器名称,比如wordpress或者apache
    docker-compose exec <容器名> bash
    # 查看权限
    ls -l /var/www/.env
    # 如果权限不对,设置合适权限
    chmod 644 /var/www/.env
    

3. 重启容器生效

修改代码和权限后,重启容器让变更生效:

docker-compose down && docker-compose up -d

补充说明

phpdotenv从2.x到3.x做了破坏性API变更:

  • 2.x:直接实例化Dotenv类并传入路径
  • 3.x+:必须通过createImmutable/createMutable静态工厂方法创建实例
    你的composer依赖指定了3.4版本,但代码还停留在2.x的写法,这就是问题的核心。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:26:11