FrankenPHP v1.4启用JIT需手动配置OPcache:确认其绑定PHP 8.5、编辑对应php.ini启用opcache.enable=1、设置opcache.jit_buffer_size=256M和opcache.jit=1205,并禁用时间戳校验与预加载,重启后通过opcache_get_status()验证enabled和on均为true。

在macOS上用Homebrew安装FrankenPHP v1.4后,系统内置PHP 8.5默认不启用JIT,需手动配置OPcache相关参数并验证生效路径,否则jit字段始终为false。
确认FrankenPHP使用的PHP版本和配置路径
执行frankenphp --version,观察输出中是否含PHP 8.5.x字样;若显示的是系统自带PHP(如8.3)或Homebrew独立安装的PHP,则说明FrankenPHP未正确绑定到PHP 8.5。此时需检查FrankenPHP启动时加载的php.ini位置:frankenphp --show-config | grep 'Loaded Configuration File'。FrankenPHP v1.4默认使用其嵌入式PHP运行时,其php.ini通常位于/opt/homebrew/opt/frankenphp/etc/php/php.ini(Apple Silicon)或/usr/local/etc/frankenphp/php/php.ini(Intel),而非/etc/php.ini。
启用OPcache并分配JIT缓冲区
用编辑器打开上一步确认的php.ini文件,在[opcache]段落下添加或修改以下三行:
opcache.enable=1
opcache.jit_buffer_size=256M
opcache.jit=1205
立即学习“PHP免费学习笔记(深入)”;
【必须确保opcache.enable=1且值为整数1,不能是字符串"1"或被其他ini文件覆盖】。FrankenPHP启动时若发现opcache.enable为0或未定义,会直接跳过JIT初始化——哪怕jit_buffer_size设得再大也无效。若该ini文件中已有opcache相关配置,优先删除旧行再重写,避免多份opcache.enable冲突。
禁用时间戳校验与预加载(可选但推荐)
在同一个[opcache]区块末尾追加:
opcache.validate_timestamps=0
opcache.preload=/dev/null
validate_timestamps设为0可防止每次请求都检查PHP文件修改时间,这对冷启动敏感的Serverless式FrankenPHP至关重要;preload设为/dev/null是临时规避预加载失败导致OPcache整体失效的风险——FrankenPHP v1.4尚未完全兼容PHP 8.5的preload路径解析逻辑,空路径比留空更安全。
重启FrankenPHP并验证JIT状态
第一步:停止当前FrankenPHP进程(Ctrl+C或pkill -f frankenphp);
第二步:重新启动服务,例如frankenphp serve --worker;
第三步:创建一个测试脚本jit_check.php,内容为<?php var_dump(opcache_get_status()['jit']); ?>;
第四步:用curl访问该脚本:curl http://localhost:8080/jit_check.php。
正常响应中应包含"enabled"=>true和"on"=>true。若出现"enabled"=>false,说明opcache.enable未生效;若"on"=>false而enabled为true,则jit_buffer_size为0或jit参数格式错误(如写成"1205 "带空格)。



















