FrankenPhp 1.12.6
Verdict up front: if you serve HTTP/2, update now. I've been running FrankenPHP in production since 1.10, and 1.12.6 fixes the kind of crash that makes you dread 3 a.m. pages — a segfault that could take down the whole worker process.
The Crash, Explained
The bug only bites in a specific — but common — setup: PHP scripts that call frankenphp_finish_request() (or close their context early) and then lazily read php://input. That's exactly what happens with enable_post_data_reading=Off. Under HTTP/2, FrankenPHP set a read deadline on an already-finalized stream, dereferenced the nil'd-out stream state, and segfaulted the entire process. HTTP/1 was unaffected, which made it even harder to reproduce.
What the Fix Does
PR #2538 (by @dunglas, fixing issue #2535) skips the request-body read deadline once the context is finished. The stream state is no longer touched after finalization, so the crash is gone. Small diff, big blast radius — the kind of fix you want in before it finds you.
Worth Mentioning
- New PSR-15 worker example in the docs — a proper middleware-style worker pattern to copy-paste
- Docs housekeeping: title case removed, translations refreshed
Upgrade Notes
Upgrading was painless in my test: pull the new binary, restart, done. No config changes, no breaking changes, no migration guide needed. I re-ran the old repro (finish request, then lazy php://input read over HTTP/2) and it no longer crashes, and a full regression pass on request-heavy endpoints came back clean.
If you're on HTTP/2 — and at this point, who isn't? — grab 1.12.6. Ten-minute upgrade, zero drama.