|  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #68207 Setting fastcgi.error_header can result in an E_WARNING being triggered
Submitted: 2014-10-10 14:07 UTC Modified: 2022-11-21 14:06 UTC
Avg. Score:3.0 ± 0.0
Reproduced:0 of 0 (0.0%)
From: nj506 at zepler dot net Assigned: bukka (profile)
Status: Closed Package: FPM related
PHP Version: 5.5.17 OS:
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If this is not your bug, you can add a comment by following this link.
If this is your bug, but you forgot your password, you can retrieve your password here.
Bug Type:
From: nj506 at zepler dot net
New email:
PHP Version: OS:


 [2014-10-10 14:07 UTC] nj506 at zepler dot net
With fastcgi.error_header set to some value (e.g. "HTTP/1.1 500 Internal Server Error"), PHP-FPM will attempt to set the header value when the PHP exit status is determined to be 255 -

If headers have already been sent, then an E_WARNING is triggered by sapi_header_op -

As such, if headers have been sent (e.g. due to output), then at some point PHP sets the exit_status value to 255 (e.g. due to an error), and fastcgi.error_header is set to some value, then an E_WARNING will be triggered.

This seems undesirable - perhaps it should simply not attempt to call sapi_header_op if headers have already been sent?

Test script:

// With fastcgi.error_header set to "HTTP/1.1 500 Internal Server Error"

echo 'x';

register_shutdown_function(function() {
    file_put_contents('/tmp/error', print_r(error_get_last(), true));

z(); // trigger a fatal error

Expected result:
A fatal error will be triggered, and the last error visible when shutting down will be the fatal.


$ cat /tmp/error
    [type] => 1
    [message] => Call to undefined function z()
    [file] => .../test.php
    [line] => 7

Actual result:
PHP-FPM attempts to replace the header, but headers have already been sent (due to output):

$ cat /tmp/error
    [type] => 2
    [message] => Cannot modify header information - headers already sent by (output started at test.php:3)
    [file] => Unknown
    [line] => 0


Add a Patch

Pull Requests

Pull requests:

Add a Pull Request


AllCommentsChangesGit/SVN commitsRelated reports
 [2022-11-21 14:01 UTC]
The following pull request has been associated:

Patch Name: Fix bug #68207: Setting fastcgi.error_header can result in a WARNING
On GitHub:
 [2022-11-21 14:06 UTC]
-Status: Open +Status: Assigned -Assigned To: +Assigned To: bukka
 [2022-11-21 14:06 UTC]
Apology for more than 8 years of silence. Seems like the reported example actually works (at least on PHP 8) as FPM flushes headers at the end of request. There is an edge case with fastcgi_finish_request() which I fixed in the linked PR so it will no longer emits any headers sent warning.

During this investigation I also noticed another problem with fastcgi.error_header which I create an issue for:
 [2022-11-22 18:22 UTC]
Automatic comment on behalf of bukka
Log: Fix bug #68207: Setting fastcgi.error_header can result in a WARNING
 [2022-11-22 18:22 UTC]
-Status: Assigned +Status: Closed
PHP Copyright © 2001-2023 The PHP Group
All rights reserved.
Last updated: Fri Mar 31 01:03:44 2023 UTC