Re: [PHP-DB] Headers sent error msg on one server but not the other...... .
Martin Norland wrote: Personally I disagree with this. Yes it's easy, but you should never enable a feature to fix a bug or problem when it can be tracked down (although obviously in time critical situations, using it as a 'band aid' is - sometimes - necessary). With a quick pointer he was able to find it, and not impact the performance of his web server (output buffering will take more memory - since it's obviously buffering all the output) More importantly though, with output buffering - no content is sent to the client until you flush - in your suggestion at the end. This isn't always an issue since many scripts do much of their processing at the top anyway, but if nothing is sent to the browser - the users will (the majority of the time) see the page they "were" on, and continue interacting with it thinking their request didn't go through. This will only increase load on your server and, depending on what the users are doing (and how your backend is written) could throw someone or something into a state of confusion. cheers, -- Ok, then you must find those characters that are sent before you modify the header. Commonly are spaces or returns. In the error "HEADER ALREADY SENT .." also appears the line number that started the output. I hope this can be useful. I hope you can find those characters. -- PHP Database Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DB] Headers sent error msg on one server but not the other ...... .
David Martínez wrote: I suggest you to activate "Output Buffering" at beggining of your code. It's so easy and should not modify the output of your code. This prevents your error "Headers already sent". At the first line of your PHP code, insert "ob_start()" and in the end of your code insert "ob_clean_flush()". If you do not want to use "Output Buffering" you should remove any character sent, including Cr Lf (\n\r). I think it's so hard and I don't recommend it. Depending of your server, PHP can evaluate \n\r as nothing or evaluate \n\r as an output. Personally I disagree with this. Yes it's easy, but you should never enable a feature to fix a bug or problem when it can be tracked down (although obviously in time critical situations, using it as a 'band aid' is - sometimes - necessary). With a quick pointer he was able to find it, and not impact the performance of his web server (output buffering will take more memory - since it's obviously buffering all the output) More importantly though, with output buffering - no content is sent to the client until you flush - in your suggestion at the end. This isn't always an issue since many scripts do much of their processing at the top anyway, but if nothing is sent to the browser - the users will (the majority of the time) see the page they "were" on, and continue interacting with it thinking their request didn't go through. This will only increase load on your server and, depending on what the users are doing (and how your backend is written) could throw someone or something into a state of confusion. cheers, -- - Martin Norland, Sys Admin / Database / Web Developer, International Outreach x3257 The opinion(s) contained within this email do not necessarily represent those of St. Jude Children's Research Hospital. -- PHP Database Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DB] Headers sent error msg on one server but not the other.....
I suggest you to activate "Output Buffering" at beggining of your code. It's so easy and should not modify the output of your code. This prevents your error "Headers already sent". At the first line of your PHP code, insert "ob_start()" and in the end of your code insert "ob_clean_flush()". If you do not want to use "Output Buffering" you should remove any character sent, including Cr Lf (\n\r). I think it's so hard and I don't recommend it. Depending of your server, PHP can evaluate \n\r as nothing or evaluate \n\r as an output. Craig Hoffman wrote: Hey Folks, I have a script that times out the session if there is no activity in a certain amount of time. If there is no activity the HEADER() redirects to the logout page and kills the session. Everything works fine on our test server, but when I test the script on the production server, I get an error "HEADERS ALREADY SENT..." after no activity. I know all this stuff needs to be on top, before any XHTML. The test server has reg globals = OFF and the production server has them set to ON. I can't change the any PHP.INI settings on the production server. Both servers are running PHP 4.3.10. Other than that PHP installation is close to identical. Any ideas / thoughts on what's causing the production server to send this error out? Something to steer me in the right direction... I'm attaching a code snippet to look at: Something is generating output before you get there - it could be as simple as: --- $stuff = ''; ?> $otherstuff = ''; ?> --- Did you spot it? That's right - a carriage return was sent. Since your application works locally, I'd have to assume something is sending output before your scripts even start. Is there any kind of header, wrapper, server-side include, or anything around the script - or perhaps you're making use of output buffering and the server isn't allowing its use? cheers, -- - Martin Norland, Sys Admin / Database / Web Developer, International Outreach x3257 The opinion(s) contained within this email do not necessarily represent those of St. Jude Children's Research Hospital. -- PHP Database Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php -- PHP Database Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DB] Headers sent error msg on one server but not the other.... .
Thanks guys. There was a space after the closing ?> tag. Best, Craig On Apr 28, 2005, at 2:08 PM, Patel, Aman wrote: Check that there is no output generated before your script hits the Header() function calls. The most common mistake I've noticed is that if you require() or include() many files before you call Header(), and if there is any content outside of the "" tags in the includ()'ed or require()'d files (eg. a carraige return at the end, or a space after the "?>". Check for that and that should fix your problem. Craig Hoffman wrote: Hey Folks, I have a script that times out the session if there is no activity in a certain amount of time. If there is no activity the HEADER() redirects to the logout page and kills the session. Everything works fine on our test server, but when I test the script on the production server, I get an error "HEADERS ALREADY SENT..." after no activity. I know all this stuff needs to be on top, before any XHTML. The test server has reg globals = OFF and the production server has them set to ON. I can't change the any PHP.INI settings on the production server. Both servers are running PHP 4.3.10. Other than that PHP installation is close to identical. Any ideas / thoughts on what's causing the production server to send this error out? Something to steer me in the right direction... I'm attaching a code snippet to look at: if (mysql_num_rows($result) > 0) { $_SESSION["valid_user"] = $email; } elseif ($t_timestamp < $c_timestamp) { HEADER("Location: logout.php"); exit; } Best, CH __ Craig Hoffman ICQ / iChat: m0untaind0g __ -- PHP Database Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php __ Craig Hoffman ICQ / iChat: m0untaind0g __ -- PHP Database Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DB] Headers sent error msg on one server but not the other.... .
Check that there is no output generated before your script hits the Header() function calls. The most common mistake I've noticed is that if you require() or include() many files before you call Header(), and if there is any content outside of the "" tags in the includ()'ed or require()'d files (eg. a carraige return at the end, or a space after the "?>". Check for that and that should fix your problem. Craig Hoffman wrote: Hey Folks, I have a script that times out the session if there is no activity in a certain amount of time. If there is no activity the HEADER() redirects to the logout page and kills the session. Everything works fine on our test server, but when I test the script on the production server, I get an error "HEADERS ALREADY SENT..." after no activity. I know all this stuff needs to be on top, before any XHTML. The test server has reg globals = OFF and the production server has them set to ON. I can't change the any PHP.INI settings on the production server. Both servers are running PHP 4.3.10. Other than that PHP installation is close to identical. Any ideas / thoughts on what's causing the production server to send this error out? Something to steer me in the right direction... I'm attaching a code snippet to look at: if (mysql_num_rows($result) > 0) { $_SESSION["valid_user"] = $email; } elseif ($t_timestamp < $c_timestamp) { HEADER("Location: logout.php"); exit; } Best, CH __ Craig Hoffman ICQ / iChat: m0untaind0g __ -- PHP Database Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-DB] Headers sent error msg on one server but not the other.... .
Craig Hoffman wrote: Hey Folks, I have a script that times out the session if there is no activity in a certain amount of time. If there is no activity the HEADER() redirects to the logout page and kills the session. Everything works fine on our test server, but when I test the script on the production server, I get an error "HEADERS ALREADY SENT..." after no activity. I know all this stuff needs to be on top, before any XHTML. The test server has reg globals = OFF and the production server has them set to ON. I can't change the any PHP.INI settings on the production server. Both servers are running PHP 4.3.10. Other than that PHP installation is close to identical. Any ideas / thoughts on what's causing the production server to send this error out? Something to steer me in the right direction... I'm attaching a code snippet to look at: Something is generating output before you get there - it could be as simple as: --- $stuff = ''; ?> $otherstuff = ''; ?> --- Did you spot it? That's right - a carriage return was sent. Since your application works locally, I'd have to assume something is sending output before your scripts even start. Is there any kind of header, wrapper, server-side include, or anything around the script - or perhaps you're making use of output buffering and the server isn't allowing its use? cheers, -- - Martin Norland, Sys Admin / Database / Web Developer, International Outreach x3257 The opinion(s) contained within this email do not necessarily represent those of St. Jude Children's Research Hospital. -- PHP Database Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-DB] Headers sent error msg on one server but not the other...
Hey Folks, I have a script that times out the session if there is no activity in a certain amount of time. If there is no activity the HEADER() redirects to the logout page and kills the session. Everything works fine on our test server, but when I test the script on the production server, I get an error "HEADERS ALREADY SENT..." after no activity. I know all this stuff needs to be on top, before any XHTML. The test server has reg globals = OFF and the production server has them set to ON. I can't change the any PHP.INI settings on the production server. Both servers are running PHP 4.3.10. Other than that PHP installation is close to identical. Any ideas / thoughts on what's causing the production server to send this error out? Something to steer me in the right direction... I'm attaching a code snippet to look at: if (mysql_num_rows($result) > 0) { $_SESSION["valid_user"] = $email; } elseif ($t_timestamp < $c_timestamp) { HEADER("Location: logout.php"); exit; } Best, CH __ Craig Hoffman ICQ / iChat: m0untaind0g __ -- PHP Database Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php