Apache ErrorDocument subrequest fails horribly
[2020-12-28 16:44 UTC] problembug at speed dot 1s dot fr
Description: ------------ Reproducible on Amazon Linux, Slackware and others with various combinations of (recent) PHP and Apache. When httpd.conf is configured with an ErrorDocument to a PHP script and an error is deliberately introduced with a faulty header, the mere presence of a flush() changes the graceful error handling (via a subrequest) in to a confusing and bizarre situation that introduces secondary bugs. These include: o PHP no longer honours previous require_once include guard o Apache not sending back any output to the client o Misleading messages in the PHP error log about other modules o Misleading messages in the PHP error log about ini_set (?) which is never used o PHP error log messages repeated multiple times The presence of a single flush() changes the graceful error handling ($test = 2) in to a confusing mess ($test = 3) and introduces seemingly unrelated bugs. Steps to reproduce: 1. Edit an Apache VirtualHost config in to include the following: ErrorDocument 500 /error.php 2. Place the 3 attached scripts in the VirtualHost's DocumentRoot: test.php error.php library.php 3. Restart Apache 4. Access https://somesite/test.php 5. Alter test.php to try $test = 2 and $test = 3 6. Observe all the unexpected and secondary problems the flush() introduces Test script: --------------- https://pastebin.com/MBQEEb5Q Expected result: ---------------- Expected result for test 3 is same as test 2: ---- PHP error log: No new entries. ---- $ curl -i https://somesite/test.php HTTP/1.1 500 Internal Server Error Date: Sun, 27 Dec 2020 14:05:47 GMT Server: Apache Content-Type: text/html; charset=UTF-8 I will deal with a 500 error and show a pretty error message Actual result: -------------- Actual result for test 3: ---- PHP error log: [27-Dec-2020 13:49:41 UTC] PHP Warning: flush(): Headers already sent. You cannot change the session module's ini settings at this time in /www/test.php on line 22 [27-Dec-2020 13:49:41 UTC] PHP Warning: flush(): Headers already sent. You cannot change the session module's ini settings at this time in /www/test.php on line 22 [27-Dec-2020 13:49:41 UTC] PHP Warning: flush(): Headers already sent. You cannot change the session module's ini settings at this time in /www/test.php on line 22 [27-Dec-2020 13:49:41 UTC] PHP Warning: flush(): Headers already sent. You cannot change the session module's ini settings at this time in /www/test.php on line 22 [27-Dec-2020 13:49:41 UTC] PHP Fatal error: Cannot redeclare foo() (previously declared in /www/library.php:4) in /www/library.php on line 4 ---- $ curl -i https://somesite/test.php curl: (52) Empty reply from server
[2020-12-28 17:46 UTC] rtrtrtrtrt at dfdfdfdf dot dfd
[2020-12-28 21:00 UTC] problembug at speed dot 1s dot fr
[2020-12-28 21:21 UTC] rtrtrtrtrt at dfdfdfdf dot dfd
[2020-12-28 22:21 UTC] problembug at speed dot 1s dot fr
[2020-12-28 22:25 UTC] rtrtrtrtrt at dfdfdfdf dot dfd
[2020-12-28 22:39 UTC] problembug at speed dot 1s dot fr
[2020-12-28 22:52 UTC] requinix@php.net
-Block user comment: No +Block user comment: Yes
[2025-01-31 20:30 UTC] bukka@php.net
-Status: Open +Status: Assigned -Assigned To: +Assigned To: bukka
[2025-01-31 20:30 UTC] bukka@php.net