This is really strange. PHP fails to exit / die form script after include /
require / include_once / required_once (I tested with all of them, same
result).
In addition to this, script gets started again automatically from the
beginning.
(You probably think this is a another newbie mistakes, but I think it is
not)
Does anyone have the same experience?
I'm asking to decide if this is worth to report as a bug. If anyone does not
have this problem but me. I'll just leave it alone. (I cannot reproduce this
with simple script anyway)
I cannot reproduce this behavior with simple script, but it does every time
on my script.
PHP 4.0.4pl1 with PostgreSQL, mhash, mcript, gd, and others
Apache 1.3.17 (mod_php, mod_gzip, mod_ssl and others)
RedHat Linux7.0.1/ja
(Apache and PHP are build from source)
My code does as follows
In user registration form (regist.php)
- require_once() to include registration function
- call registration function
- if the function does not exit, display HTML in this registration file.
regist.php looks like
------------
<?php
require_once('regist_util.inc');
$msg = user_regist(); // defined in regist_util.inc
?>
<html>
<form method=post action=regist.php>
<?php @print($msg); // print errors for users' inputs if there is ?>
........................
<input type="text" name="username"></input>
<input type="text" name="email"></input>
........................
</html>
-------------
regist_util.inc does <= THIS FILE HAS PROBLEM
- check if there is the same user name is registered
- if there is, return 'Choose other name' error (or other error)
- if not, insert user data into database and send notify email, include
other html file
to show user registered successfully. Then exit script.
regist_util.inc looks like
--------------
<?php
function regist_user() {
global $HTTP_POST_VARS;
$error = array();
// check inputs add errors, add error like $error[] = 'Error1'; $error[] =
'Error2';
// check database
$db = pg_pconnect();
$qid = pg_exec("select * from user where username = '".
$HTTP_POST_VARS['username'] ."'");
if (pg_numrow($qid) > 0) {
$error[] = 'Choose other name';
}
if (count($error) == 0) {
// INSERT DATA - data is inserted if username is new
.........................
// SEND EMAIL - mail is sent if username is new
.......................
<= **** if I put die() or exit() BEFORE include PHP exits from script as
expected. ****
// include HTML file (with just a little PHP code)
include('registered.php'); <= **** THIS IS NOT DISPLAYED AT ALL ******
// If I remove include(), it exits from script.
exit; <= ************* DOES NOT EXIT or DIE HERE *************
// Script seems start from the beginning. It shows 'Choose other name' error
and
// there is the data newly creating in database, even if the user table is
empty.
// Because data with the username was inserted at 1 first time script
iteration.
// For the second time, script finds the username (of course) and return
'Choose
// other name' error.
// Since I did get ANY additional HTML, but HTML codes in regist.php when
// this happened, I thought it might something to do with 'ob_gzhandler'. I
// disabled it. But no difference. This makes difficult to find out what PHP
is
// doing, now I'm sure PHP is executing the scripts TWICE.
// Reason:
// 1) There will be a new db table row every time I use new username.
// 2) I get notification email every time I use new username.
// (I thought PHP never buffer outputs unless user explicitly to do so)
// If I redirect, it works as expected.... I would rather not to show
registered.php, since
// user does not have to access this page directly. (I can work around this
with different
// way, so I will do so)
// By the way, I use EUC-JP code, which is multi-byte char code set, in
scripts
// and HTML part, etc. EUC-JP supposed to work well for many programs
written
// for single byte char code set. However, it might something to do with
char code.
// I'm using. So far, I didn't have problems. May be this is the first time.
(I haven't
// investigated yet)
}
}
---------------
registered.php looks like
--------------
<html>
<body>
You have been registered to this web site<br>
username = <?php @print($HTTP_POST_VARS['username']; ?><br>
..........................
</body>
</html>
---------------
--
Yasuo Ohgaki
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]