Log in

View Full Version : Error : Unable to add cookies, header already sent.


nirvana43
07-06-2009, 02:54 AM
Hello
I've created 1 custom page by referring to vBulletin API Basics topic posted by Psionic Vision.
Here is topic url : https://vborg.vbsupport.ru/showthread.php?t=98009
I'm getting following error :confused: :
Unable to add cookies, header already sent.
File: /home2/aditya43/public_html/forums/test.php
Line: 1


My test.php file contains following code :
<?php
error_reporting(E_ALL & ~E_NOTICE);
define('NO_REGISTER_GLOBALS', 1);
define('THIS_SCRIPT', 'adi');
$globaltemplates = array('adi');
require('./global.php');
include('aaa/tmp.php');
$navbits = array();
$navbits[$parent] = 'Aditya Test Page';
$navbits = construct_navbits($navbits);
eval('$navbar = "' . fetch_template('navbar') . '";');
if (!$vbulletin->userinfo['userid'])
{
print_no_permission();
}
else
{
eval('print_output("' . fetch_template('adi') . '");');
}
?>


My template "adi" under vbulletin contains following code :
$stylevar[htmldoctype]
<html dir="$stylevar[textdirection]" lang="$stylevar[languagecode]">
<head>
<title>$vboptions[bbtitle]</title>
$headinclude
</head>
<body>
$header
$navbar
<if condition="$adiinitcond">
$testcond1
<else/>
$testcond2
</if>
</table>
$footer
</body>
</html>


tmp.php file contains :

$a=5;
$b=6;
$adiinitcond="$a>$b";
$testcond1="$a is bigger";
$testcond2="$b is bigger";


However if i login to vbulletin forum and then access test.php, it works perfect. But as a guest it gives me above error.
I also wanna allow guests on test.php or at least it should print vbulletin error message.

Here is what i've done so far to get rid of above error :
1. Removed all whitespace etc.
2. Tried "<?php" tag without closing php tag "?>"
3. Tested after removing "include('aaa/tmp.php');" from test.php
4. Removed all "echo", "print" etc. from tmp.php

The possible cause of above error is i'm trying to send data or something to browser before vbulletin cookies. So i traced my entire code and found i'm not sending anything to browser before cookies (or am i?).

Lynne
07-06-2009, 03:24 PM
You posted this exact same question on vb.com and I answered over there.

nirvana43
07-07-2009, 01:03 AM
You posted this exact same question on vb.com and I answered over there.
Thank you for your reply :
You should be posting this over at vb.org where they deal with custom coding.

You should try giving no permission *before* you eval any templates (like your navbar).

If you need further help, you should post this over at vb.org.

You should try giving no permission *before* you eval any templates (like your navbar).
Please explain more... how do i do that?
Can you post the code segment?
Here is what i've tried so far :
eval('$navbar = "' . fetch_template('navbar') . '";');
if (!$vbulletin->userinfo['userid'])
{
print_no_permission();
}
else
{
eval('print_output("' . fetch_template('bebo') . '");');
}

But that ain't solving the problem.
Well can you tell me something, if i write "include(file.php)" in else part before "eval('print...')" can cause error??
But still i think as cookies are already sent because of *no permission* condition, it would've worked...

EDIT :
I tried all above things but still nothing is working.

Lynne
07-07-2009, 01:26 AM
Right after including global.php is when you want to do the lines about whether the user is logged in:
if (!$vbulletin->userinfo['userid'])
{
print_no_permission();
}
Then do the rest of your stuff.

nirvana43
07-07-2009, 02:31 AM
Right after including global.php is when you want to do the lines about whether the user is logged in:
if (!$vbulletin->userinfo['userid'])
{
print_no_permission();
}
Then do the rest of your stuff.

That is exactly what i've tried as specified in my above post. But i'm still getting same error.
BTW is there any way i can permit guests also on same page.
Because if we put *no permission* thing then only registered members can view the page.
Is there any way we can get around this cookies problem?

I also tried ob_flush();
But still aint working :erm:

Lynne
07-07-2009, 02:45 PM
That is exactly what i've tried as specified in my above post. But i'm still getting same error.
That is not what you are showing in the above post. You have the no permission going on after the template is evaled, not before.
BTW is there any way i can permit guests also on same page.
Sure, by not putting in that line. The code says 'if there is no userid, then give them a no permission page'. If you don't want that to happen, why do you have it in your code?

saajjj
01-02-2010, 09:39 PM
Apologies for digging up this old thread.

I was wondering if the OP found a solution?

I was stuck in EXACTLY the same position and the solution was quite strange. All I did was to ensure that test.php was saved without the Byte Order Mark. For those who don't know, the BOM allows applications to know what the encoding of the file is. You can read all about it here (http://unicode.org/faq/utf_bom.html#BOM)

Software like notepad++ (free) make it very easy to save a file without the BOM.

nirvana43
01-03-2010, 01:15 AM
Yes, BOM could cause similar problem. Saving file in utf encoded format could also cause garbage character data to be displayed on page. All we gotta do is save file in ANSI/ASCII. I use Ultra Edit for writing codes. :)