frankenphp不内置环境自动识别,需通过环境变量(如app_env)、配置文件(caddyfile.dev/prod)及docker多阶段构建三方面手动区分:开发启用调试、禁用https;生产强制https、关闭错误显示并优化opcache。

FrankenPHP 本身不内置“开发/生产环境自动识别机制”,区分主要靠三方面:配置文件内容、启动方式、以及容器或运行时的环境变量控制。核心原则是——环境差异由外部注入,而非框架自动判断。
通过环境变量切换行为
FrankenPHP 支持用 APP_ENV 或自定义变量(如 FRANKENPHP_ENV)配合 Caddyfile 或 PHP 逻辑做条件分支:
- 在
compose.yaml或启动命令中显式设置:environment: - APP_ENV=production - Caddyfile 中可用
php_server指令配合条件判断(需搭配 PHP 脚本逻辑):
例如在入口脚本中读取$_ENV['APP_ENV'],决定是否启用调试工具、错误报告级别或日志路径 - PHP 的
error_reporting和display_errors应严格按环境配置:
生产环境必须设为error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED,且display_errors=Off,日志写入文件而非屏幕
通过不同配置文件分离
推荐在项目中维护两套 Caddyfile:
-
Caddyfile.dev:启用debug模式、禁用 HTTPS(监听:8080)、允许未加密连接、开启详细日志 -
Caddyfile.prod:强制 HTTPS、启用 HTTP/3、配置 HSTS 头、关闭调试信息、绑定真实域名 - 启动时用
--config指定:frankenphp run --config Caddyfile.prod(生产)frankenphp run --config Caddyfile.dev(开发)
通过 Docker 构建阶段隔离
利用多阶段构建,在镜像层就固化环境特征:
- 开发镜像:基于
dunglas/frankenphp:dev,预装 Xdebug、Composer、Git,挂载源码卷,支持热重载 - 生产镜像:基于
dunglas/frankenphp:static-builder-musl或:alpine,仅复制编译后的/app/public和Caddyfile.prod,无调试工具,镜像体积更小 - Dockerfile 中用
ARG BUILD_ENV=production控制 COPY 行为或 php.ini 覆盖逻辑
通过 PHP 自身配置文件管理
不要依赖 php.ini-development / php.ini-production 的软链接切换,而应明确覆盖:
- 开发环境:在容器启动时运行
cp $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini - 生产环境:固定使用
php.ini-production,并额外追加定制项:RUN echo "opcache.enable=1\nopcache.memory_consumption=256" >> $PHP_INI_DIR/php.ini - 敏感配置(如数据库密码)始终从环境变量读取,不硬编码进任何 ini 或 PHP 文件
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











