Bug #68207 [PATCH]: Setting fastcgi.error_header can result in an E_WARNING being triggered

From: Date: Mon, 21 Nov 2022 14:01:36 +0000
Subject: Bug #68207 [PATCH]: Setting fastcgi.error_header can result in an E_WARNING being triggered
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-242858@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=68207&edit=1 ID: 68207 Patch added by: bukka@php.net Reported by: nj506 at zepler dot net Summary: Setting fastcgi.error_header can result in an E_WARNING being triggered Status: Open Type: Bug Package: FPM related PHP Version: 5.5.17 Block user comment: N Private report: N New Comment: The following pull request has been associated: Patch Name: Fix bug #68207: Setting fastcgi.error_header can result in a WARNING On GitHub: https://github.com/php/php-src/pull/9980 Patch: https://github.com/php/php-src/pull/9980.patch Previous Comments: ------------------------------------------------------------------------ [2014-10-10 14:07:49] nj506 at zepler dot net Description: ------------ 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 - https://github.com/php/php-src/blob/f89ee8040a8b8d93981c9df85a79592ceac02f1f/sapi/fpm/fpm/fpm_main.c#L1950-L1958 If headers have already been sent, then an E_WARNING is triggered by sapi_header_op - https://github.com/php/php-src/blob/f89ee8040a8b8d93981c9df85a79592ceac02f1f/main/SAPI.c#L675-L686 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: --------------- <?php // 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. e.g. $ cat /tmp/error Array ( [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 Array ( [type] => 2 [message] => Cannot modify header information - headers already sent by (output started at test.php:3) [file] => Unknown [line] => 0 ) ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=68207&edit=1

« previous php.bugs (#242858) next »