ID: 21210 Updated by: [EMAIL PROTECTED] Reported By: [EMAIL PROTECTED] -Status: Open +Status: Feedback Bug Type: Session related Operating System: Linux 2.4.7 PHP Version: 4.2.3 New Comment:
Do a 'od -c include.php' and see what is at the end of your included file. I bet you have extra carriage returns. Previous Comments: ------------------------------------------------------------------------ [2002-12-26 20:19:44] [EMAIL PROTECTED] Calling includes or requires seems to create header output, even if the includes or requires are blank. This conflicts with session handling in situations where the session is called as a result of logic-branches in the code. I have encountered this issue on several different systems. Here's the setup. Create an include file, called "include.php". Put the following in it: <?php ?> Now, create a page with the following code: <?php include("include.php"); session_start(); session_register("SESSION"); if (!isset($SESSION)) { $SESSION["count"] = 0; print("<p>Counter initialized, please reload this page to see it increment</p>"); } else { print("<p>Waking up session $PHPSESSID</p>"); $SESSION["count"]++; } print("<p>The counter is now $SESSION[count] </p>"); ?> run the page with all the code in the browser such that it includes the include file above. Even though the include file does not write or generate a single header, the output I get is: "Warning: Cannot send session cookie - headers already sent by (output started at include.php:1) in test.php on line 4 Warning: Cannot send session cache limiter - headers already sent (output started at include.php:1) in test.php on line 4 Counter initialized, please reload this page to see it increment The counter is now 0 " My observation is corroborated by the following note, found on the session_start() function manual page at php.net. ############ As per <shadowflame at starpilot dot net>: "If you are using an include page, such as a config or possibly common-functions page, that relies on session variables being pulled from the sesssion, remember to add the session_start() function _before_ you call the includes, or your session will not be called by the page..." Any include or require called before you call session_start() will cause the initial session setup to fail, even if that include file contains only a comment! Here are scenarios: include("blank_file.php"); session_start(); This works. However: include("file_with_just_a_comment_in_it.php"); session_start(); Does not. The recommended way to use session_start() is of course to put it at the top of the page. However, if, like me, you find yourself wanting to start a session only as a result of some previous logic, this avenue is closed to you. You will have to use ob_start() and related functions, and create a code mess. It will be a beautiful day when header conflicts are caused only by the layout of my code rather than PHP code cruft. ############## As mentioned, I've encountered this on several different systems, so configure lines and php.ini doesn't seem to be too relevant. If you want build lines or php.ini, I'll send them on via e-mail. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=21210&edit=1