Back to vBulletin 3 Articles

Tip to Cure: Warning: Cannot add header information - headers already sent by Error
by Logician 30 Dec 2002

This is one of the most frequent errors you can get especially when you are hacking vb. It's easy to fix for someone who knows what he is doing, can be very hard to trace for others. If you are getting this error, I can not fix it for you, but some tips as to why this error happens can give you the ground to fix it yourself.

Why the Error happens?
First here is a technical background: Before the server sends a HTML info to the user, it first performs some special actions and sends a "header" page before it starts posting HTML elements of this page. These special actions and header information can not be send AFTER you started to send the HTML elements to user's browser.

For example, one of the most commonly used of these special actions is setting a cookie in user's computer. Cookie setting should be done inside the "header" and header should be sent before anything else is sent. So you can not set a cookie in user's computer say in the middle of a HTML page. If you try, you'll get this infamous error message: "Warning: Cannot add header information - headers already sent by.."

So the reason this error happens is your script started sending some HTML output and after that it tried to send an "header" which is wrong.

The error in vbulletin Hacking:
While you hack vb, you can encounter this problem if you wrongly hacked some vb files (eg. functions.php, config.php, global.php) which runs before HTML output begins. If you accidently started the HTML output in these files, you'll end up with this error. This is because after these files run, vbulletin tries to make some "header" related actions like checking user's cookie or attempting to set a cookie for the user and if you started the HTML output accidently beforehand, header can not be formed and this error happens.

This error is easy to fix if you know where you hacked and what causes this error. Just look for the additions you made in the code and try to find which part of it sends an information to user's browser and remove it.

But if you are a newbie this can be hard to trace because unlike what you think, the displayed information that causes this error is not always very easy to see. This information can be anything, even some invisible elements. For example "new line" command or even a "space" character (both of which are invisible to you) causes this error.

For example:
functions.php or config.php file ends with the line:
PHP Code:
?> 
While hacking these files if you accidently pressed entered after > or put a space character there, you'll get this error because these invisible characters will start HTML output even if you didn't intend to. Same applies if you do the same in the same files right before
PHP Code:
<?php
at the begining.

How to read the the error message you get:
When you receive this error, you'll get a message like this:
Warning: Cannot add header information - headers already sent by (output started at D:\webserver\testforum\admin\functions.php:2) in D:\webserver\testforum\admin\functions.php on line 1692
While tracing the error, people tend to check around the line 1692 in functions.php and get confused as they didn't even touch that part while they were hacking the vbulletin. Well, you are on the wrong track: This section is not where error resides, it's just where error is revealed. The error is actually in line 2 of functions.php as the error message gives you the tip: "output started at D:\webserver\testforum\admin\functions.php:2". This is where your HTML output started even though it shouldn't. So you should check around the line where error message says the output started at.

How the fix it:
Needless to say, you have to remove unnecessary line/section that starts the unauthorized HTML output. You have to be careful as this can be an invisible character like a space or new line as mentioned above.

If the output line that produces the error is very small like 1, 2 or 3, you make sure there is nothing else before <?php at the begining of the file. If the line number is too big then make sure you check there is nothing after ?> at the end of file. If the line is in the middle look for a "echo" command there, it may be the cause. These are just frequent occurences of this eror but do not cover all issues regarding this error, so you have to remember the general rule to fix it in your script: Remove any char. that starts the HTML output in the part error mentions.

If you are not very skilled at PHP, have no tools (sophisticated text/HTML editing tools like editplus) that show you invisible chars or can't find the error no matter what then your best bet is to remove the last hack you installed and reinstall it if necessary but this time more carefully. If you are desperate you can replace the file that produces the error with an unhacked vb file which will help you get rid of the error instantly. (Be warned, you'll lose all hacks you applied to this file).

Good luck! :glasses:

vblts.ru supports vBulletin®, 2022-2024