frankenphp 1.4 不自动加载 php.ini,必须通过 -php-config 参数显式指定绝对路径(如 -php-config /etc/php/custom.ini),启动时一次性读取并全局复用,不支持 phprc、注册表或默认路径搜索。

FrankenPHP 1.4 不使用传统 PHP-FPM 的 php.ini 加载机制,也不读取系统注册表、PHPRC 环境变量或默认搜索路径(如 /usr/local/lib/php.ini)。它采用 嵌入式 Go 运行时 + 常驻 PHP Worker 模式,因此 php.ini 的加载逻辑被重构为:由 FrankenPHP 主进程显式指定,且仅支持单一、明确的配置文件路径。
要自定义 php.ini 文件路径,关键在于启动 FrankenPHP 时通过命令行参数传入,而不是依赖自动探测。
✅ 正确指定自定义 php.ini 路径的方法
FrankenPHP 1.4 提供 -php-config 参数(注意不是 -c 或 --php-ini),用于强制指定 php.ini 文件的绝对路径:
frankenphp run -php-config /etc/php/custom.ini
⚠️ 必须是绝对路径;相对路径会被忽略或导致启动失败。
✅ 该文件在 FrankenPHP 启动时被一次性读取并缓存,后续所有 Worker 复用同一份配置。
? php.ini 文件需满足的条件
- 文件必须存在且可读(FrankenPHP 进程有权限访问);
- 推荐基于
php.ini-development或php.ini-production修改,避免遗漏关键基础配置(如extension_dir、date.timezone); -
不支持
[HOST=]或[PATH=]配置段 —— FrankenPHP 当前版本(1.4)尚未实现 per-host 或 per-path 的 ini 分区逻辑; - 若启用扩展(如
opcache、pdo_mysql),确保extension=行指向正确的.so或.dll文件路径(FrankenPHP 使用自己的 PHP 构建环境,扩展路径通常不同于系统 PHP)。
?️ 实际部署建议(以 Caddy + FrankenPHP 为例)
若你用 Caddy 的 php_server 指令集成 FrankenPHP,需在 Caddyfile 中通过 env 传递参数,但注意:Caddy 本身不直接控制 FrankenPHP 的 -php-config 参数。正确做法是:
-
不要在 Caddyfile 里尝试覆盖 php.ini 路径(
php_server没有php_config选项); - 改用 systemd 或 shell 启动脚本预设 FrankenPHP 进程:
# /etc/systemd/system/frankenphp.service
[Unit]
Description=FrankenPHP Server
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www
ExecStart=/usr/local/bin/frankenphp run \
-php-config /etc/php/frankenphp.ini \
-workers 4 \
-http :8080
Restart=always
[Install]
WantedBy=multi-user.target
然后 sudo systemctl daemon-reload && sudo systemctl start frankenphp。
❌ 常见误区(不会生效)
- 设置
PHPRC=/etc/php/custom.ini环境变量 → FrankenPHP 1.4 忽略该变量; - 把
php.ini放到项目根目录或/etc/php/下期望自动加载 → 不会扫描这些路径; - 在
Caddyfile中写php_server { php_config /path/to.ini }→ 语法错误,Caddy 不识别该指令; - 修改 Windows 注册表
HKEY_LOCAL_MACHINE\SOFTWARE\PHP\→ 对 FrankenPHP 完全无效(它是跨平台 Go 二进制,不读 Windows 注册表)。
? 验证是否生效
启动后访问一个含 phpinfo() 的页面,查找 "Loaded Configuration File" 一行 —— 它应精确显示你通过 -php-config 指定的路径。如果显示 (none) 或其他路径,说明参数未正确传入或文件不可读。
也可以用 CLI 快速验证:
frankenphp eval 'echo get_cfg_var("loaded_ini_file");' -php-config /etc/php/custom.ini
输出应为 /etc/php/custom.ini。
FrankenPHP 的配置路径控制比传统 PHP 更简洁,但也更严格:没有“搜索”,只有“指定”。只要用对 -php-config,路径就确定了。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











