|  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
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
Block user comment
Status: Assign to:
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-2024 The PHP Group
All rights reserved.
Last updated: Thu Feb 22 20:01:29 2024 UTC