frankenphp仅读取配置中显式指定的php.ini绝对路径,不自动扫描系统默认路径;需在frankenphp.yaml或caddyfile中准确设置php_ini_path,且文件必须存在、可读,修改后须重启进程,否则配置被忽略。

FrankenPHP 读取 php.ini 的真实路径逻辑
FrankenPHP 不会自动扫描系统默认的 /etc/php/*/cli/php.ini 或 /usr/local/lib/php.ini,它只认自己配置里明确指定的那个路径。如果你没在 frankenphp.yaml 或 Caddyfile 里声明,它就用内置的最小化 ini(几乎为空),很多扩展、时区、内存限制等都不会生效。
必须显式配置 php_ini_path 才有效
在 /etc/frankenphp/frankenphp.yaml 中,php.ini_path 字段是硬性依赖项,不填或填错路径,FrankenPHP 启动时不会报错,但你的 ini 设置全被忽略:
-
php_ini_path必须是绝对路径,比如/etc/frankenphp/php.ini - 该文件需存在且可读,FrankenPHP 不会自动创建它
- 如果使用 Docker 镜像(如
dunglas/frankenphp),推荐把自定义php.iniCOPY 进镜像并指向它,而不是依赖宿主机路径 - 修改后必须重启 FrankenPHP 进程,
php_ini_path不支持热重载
Docker 环境下最容易踩的坑:路径映射错位
很多人把 php.ini 放在宿主机 ./config/php.ini,然后用 volume 映射进容器,却忘了在 frankenphp.yaml 里写容器内路径:
php: ini_path: "/app/config/php.ini" # ✅ 容器内路径
而不是宿主机路径 ./config/php.ini ——后者在容器里根本不存在。另外注意:install-php-extensions 工具改的是 $PHP_INI_DIR/php.ini,但 FrankenPHP 默认不读这个位置,除非你显式把它设为 ini_path。
验证是否生效的最快方式
别只看 phpinfo() 页面,直接用命令行确认:
frankenphp php-cli -i | grep "Loaded Configuration File"
输出应为实际生效的路径。如果显示 none 或路径不对,说明 php_ini_path 没配对,或者文件权限/SELinux 导致读取失败。FrankenPHP 对 ini 文件的加载非常“安静”,出错也不提示,这是最常被忽略的调试盲点。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











