FrankenPHP 1.5 默认屏蔽所有PHP错误,需在frankenphp.yaml中配置php.options.display_errors: "1"、error_reporting: "32767"等参数,或在入口文件顶部用ini_set()强制启用,且须确保YAML文件可读及error_log路径可写。

FrankenPHP 1.5 默认不显示 PHP 错误,需手动启用
FrankenPHP 1.5 不继承传统 PHP-FPM 的 display_errors = On 行为,它默认屏蔽所有 PHP 错误输出(包括 E_NOTICE 和 E_WARNING),即使你改了系统级 php.ini 也无效。这是因为 FrankenPHP 在进程内接管了错误处理逻辑,必须通过其专属配置或运行时干预才能暴露错误。
在 frankenphp.yaml 中配置 PHP 运行时参数
FrankenPHP 使用 YAML 配置文件统一管理 HTTP 行为和 PHP 环境,display_errors、error_reporting 等必须在此处声明,不能依赖外部 php.ini。
- 确保项目根目录存在
frankenphp.yaml(若无,新建) - 添加以下内容(注意缩进,YAML 对空格敏感):
php: options: display_errors: "1" error_reporting: "32767" # 即 E_ALL log_errors: "1" error_log: "/var/log/frankenphp_error.log" -
error_log路径需确保 FrankenPHP 进程用户(如www-data)有写权限,否则日志静默失败 - 修改后无需重启服务 —— FrankenPHP 会热重载该文件(但首次创建需重启)
入口脚本中强制覆盖 PHP 错误设置
当 YAML 配置未生效(例如路径错、语法错、或使用了 frankenphp-worker 模式),可在入口文件(如 public/index.php)顶部立即插入:
ini_set('display_errors', '1');ini_set('error_reporting', E_ALL);ini_set('log_errors', '1');- 必须放在 任何输出之前,包括 UTF-8 BOM、空白行、
echo、框架自动加载等 - 若用 ThinkPHP/Laravel 等框架,此方式仅能捕获“进入框架前”的错误;框架内部异常仍由其异常处理器接管,需额外开启框架调试开关
Xdebug 在 FrankenPHP 1.5 中的特殊启用方式
FrankenPHP 内嵌 PHP 解析器,不支持传统 zend_extension 加载方式。Xdebug 必须以 “SAPI 模式” 启用,且仅支持 Xdebug 3.3+ 与 PHP 8.2+ 组合。
立即学习“PHP免费学习笔记(深入)”;
- 确认已安装兼容版本:
frankenphp --version输出中需含PHP 8.2+,再执行pecl install xdebug(非php -r "..."安装) - 在
frankenphp.yaml中添加:php: options: xdebug.mode: "debug,develop" xdebug.start_with_request: "yes" xdebug.client_host: "127.0.0.1" xdebug.client_port: "9003" - FrankenPHP 不支持
xdebug.remote_*旧参数,使用即报错 - IDE(如 PhpStorm/VS Code)需监听
9003端口,且浏览器安装 Xdebug Helper 插件并设为 Debug 模式
FrankenPHP 的调试开关是分层的:YAML 控制全局 PHP 行为,入口脚本控制单次请求上下文,Xdebug 则完全依赖其 SAPI 兼容性。最容易忽略的是 frankenphp.yaml 文件权限(必须可被 FrankenPHP 进程读取)和 error_log 目录写权限 —— 错误不显示时,先查这两个地方。



















