既然是在 Docker 容器中运行,那么 app()->getRootPath() 获取到的 /www 是容器内部的绝对路径,这在容器环境下是完全正确的。 在 Docker 容器化架构中,你需要区分两个路径概念: 容器路径 (Container Path): PHP 进程实际运行所在的路径(例如 /www)。TP6 框架只能感知到这个路径。 宿主机路径 (Host Path): 物理服务器上的真实路径(例如 /var/www)。 为什么 TP6 会显示 /www? 这是因为你在 docker-compose.yml 或 docker run 命令中进行了卷挂载(Volumes)。例如: yaml services: php: volumes: - /var/www:/www # 宿主机的 /var/www 映射到了容器内的 /www Use code with caution.
由于 PHP 运行在容器镜像定义的隔离环境中,它眼中的“世界根目录”就是映射后的 /www。 如果你必须获取 /var/www(宿主机路径): 通常情况下,不建议在代码中直接使用宿主机路径,因为这会破坏容器的可移植性。但如果你有特殊需求(如记录日志到宿主机指定位置),可以尝试以下方案: 方案 A:统一路径(推荐) 修改 Docker 配置,将容器内挂载点也改为 /var/www。 yaml volumes:
- /var/www:/var/www Use code with caution.
这样 app()->getRootPath() 就会返回 /var/www。 方案 B:使用环境变量 在 Docker 配置中传入一个自定义变量: yaml environment:
- HOSTROOTPATH=/var/www Use code with caution.
然后在 TP6 中通过 env('HOSTROOTPATH') 获取。 总结: 只要你的程序能正常读写文件、连接数据库,/www 就是有效的。你是因为日志路径对不上,还是在执行外部脚本时遇到了路径报错?