Atb.: How to debug "Unknown: Headers already sent"?
| From: | Jānis Elmeris | Date: | Sun, 09 Jan 2022 12:57:30 +0000 |
| Subject: | Atb.: How to debug "Unknown: Headers already sent"? | ||
| References: | 1 2 3 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-327886@lists.php.net to get a copy of this message | ||
I added an auto_prepend_file which outputs into the error log, and it looks like the error happens
even before the auto-prepend file.
A different timezone (set quite early in the Wordpress script) of the "headers already
sent" message and the error log messages I added in the WP code, already hinted at that.
Could some incorrect (not quite correct) Nginx configuration cause it? (In combination with the
specific code, as on the same server but outside of Wordpress / Woocommerce directory, this problem
does not happen.)
Regards,
Janis
________________________________
No: Jānis Elmeris <janis.elmeris@lv.lv>
Nosūtīts: piektdiena, 2022. gada 7. janvāris 14:13
Kam: AllenJB <php.lists@allenjb.me.uk>; php-general@lists.php.net
<php-general@lists.php.net>
Tēma: Re: How to debug "Unknown: Headers already sent"?
Thank you for the reply!
I added error_logs before all the ini_sets I could find. When I browsed the Woocommerce, I got the
error three times in about 10 minutes. Looking at the error log, it seemed that one time the error
occurred right before one specific ini_set call, but the two other cases didn't have explicit
ini_set calls in the code around the time the "Unknown: Headers already sent." error
appeared. So, I guess that the first one was just a coincidence.
I'm somehow not too hopeful of finding the problem in the PHP code seeing as PHP engine itself
does not know which PHP code file causes the problem. So, I suppose, the problem should be on some
other level, shouldn't it?
I saw someone on the Internet mentioning XDebug as a way to debug something like this but gave no
details. Would you have any idea on how to use XDebug for such cases?
Janis
________________________________
No: AllenJB <php.lists@allenjb.me.uk>
Nosūtīts: ceturtdiena, 2022. gada 6. janvāris 21:28
Kam: php-general@lists.php.net <php-general@lists.php.net>
Tēma: Re: How to debug "Unknown: Headers already sent"?
On 06/01/2022 17:13, Jānis Elmeris wrote:
How can I try debugging the "Unknown: Headers already sent. You cannot change the session
module's ini settings at this time in Unknown on line 0" warning, when PHP is not giving
any more details except that it happened (no info on what's trying to send the headers or where
the output had started).
This warning happens from time to time only. (In my case, it happens when I browse a Woocommerce
store. It has happened in the local dev environment when I click on a product, when I click on
adding product to the cart, when I click to checkout. But it happens rarely. Mostly, all the
requests are processed all right, no PHP warnings.)
Almost everything that I found about "headers already sent" on the Internet, refers to the
cases when the PHP code is written in a way that outputs some content before sending the headers, in
which case the PHP gives a reference to the PHP code that's in some way related to the error.
But the "unknown" cases are different.
I found that this error may be caused by repeatedly loading the same PHP extensions, or by some PHP
extension working incorrectly. For example, "zlib" extension has had such problem when
executing "ob_gzhandler".
I looked at the PHP configuration and didn't see an extension being loaded more than once.
Regarding "ob_gzhandler", I found only one place in the Wordpress code using it, and added
a log there. Then I got a headers already sent warning message, but the "ob_gzhandler" had
not been used in that request.
So, how could this warning be tracked down? Can I use XDebug somehow to do it?
I'm using PHP 7.4 FPM.
Regards,
Janis
The error message is specifically complaining about ini settings being set. I would check the code
for any calls to ini_set(), specifically that are modifying ini settings relating to sessions (which
all start with 'session.' - see https://www.php.net/manual/en/session.configuration.php
). If you can then trace when / where this code is called, this might help you work out what's
going on.
When the issue does occur, try to note down what you were doing when it happened. What were the last
few actions you did? These may help you to work out how to reproduce the issue.
As you appear to be using WooCommerce, I would try their support forums / chat as they may know of
issues specific to that application or any popular plugins / extensions: https://developer.woocommerce.com/
You might also want to try forums / chat for WordPress as WooCommerce is built on that. You may also
want to check all your plugins are up-to-date, look for any which haven't been updated by their
developers in a long time and disable any which aren't being used.