FrankenPHP v1.3 在 macOS 上不读取外部 php.ini,OPcache 必须通过 build 时注入 prod.ini 配置固化到二进制中;验证需用构建后的二进制访问 phpinfo.php 或调用 opcache_get_status() 确认启用。

在 macOS 上使用 FrankenPHP v1.3 时,直接修改系统任意位置的 php.ini 文件完全无效,因为官方静态二进制版本将 PHP 配置硬编码进可执行文件,启动时不读取文件系统上的 ini 文件——哪怕你把它放在 /usr/local/lib/php.ini 或项目根目录下,FrankenPHP 也视而不见。
确认当前 FrankenPHP 内置 PHP 是否已含 OPcache
打开终端,进入你的 FrankenPHP 二进制所在目录(例如 ~/frankenphp),执行:
./frankenphp run
第一行日志即为实际加载的 PHP 版本与构建信息,末尾通常带 (with Zend OPcache) 字样。若无此提示,说明该二进制未编译进 OPcache,需换用含 OPcache 的构建版本或自行 rebuild。
接着运行:
./frankenphp php-cli -m | grep opcache
有输出即表示模块已内置并可用;若无输出,后续所有配置步骤都将失败。
用 frankenphp build 打包时注入 OPcache 配置
这是 macOS 上唯一可靠启用 OPcache 的方式。你不能改 ini,只能在构建阶段把配置固化进新二进制。
立即学习“PHP免费学习笔记(深入)”;
准备一个纯文本文件 prod.ini,内容如下:
opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.validate_timestamps=1
opcache.revalidate_freq=60
opcache.fast_shutdown=1
【必须用 zend_extension=opcache.so 这一行,且不能加在 prod.ini 里】 —— FrankenPHP embed 模式下 opcache.so 已静态链接,强行写这一行会导致启动报错“Duplicate module”。
执行构建命令:
./frankenphp build --php-ini=prod.ini --output=myapp
生成的 myapp 就是启用了 OPcache 的独立二进制,双击或 ./myapp 即可运行,无需任何外部依赖。
验证 OPcache 是否真正生效
启动刚构建的 myapp 后,在浏览器中访问 http://localhost:8080/phpinfo.php(确保项目中有该文件),搜索 “OPcache”,确认 “Opcode Caching” 显示 Enabled。
更关键的是执行运行时检测:
创建 test-opcache.php,内容为:
<?php var_dump(opcache_get_status()['opcache_enabled']); ?>
访问该脚本,输出必须为 bool(true)。若为 false 或报错 Call to undefined function opcache_get_status(),说明构建时未正确注入配置或二进制不兼容。
注意:不要用系统 php -i 查看结果,它显示的是 macOS 自带 PHP 或 Homebrew PHP 的配置,和 FrankenPHP 完全无关。



















