#41672 [Opn]: connection_status/connection_abort issue

From: Date: Tue, 12 Jun 2007 20:24:06 +0000
Subject: #41672 [Opn]: connection_status/connection_abort issue
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-113717@lists.php.net to get a copy of this message
ID: 41672 User updated by: mfshop at comcast dot net Reported By: mfshop at comcast dot net Status: Open Bug Type: Unknown/Other Function Operating System: Windows 2003 Server PHP Version: 4CVS-2007-06-12 (snap) New Comment: As a quick addendum. If I set the loop size in the above example code to 60 then the results are the same except that the final line reads as I would expact: "Final: 1, 1". Note that this seems to be related to time and not the amount of data sent as keeping the loop count at 20 but attempting to echo out a lot more text to the browser repeats the original results. This seems to indicate that connection_status() and connection_aborted() at least return the proper values when called within a registered shutdown function AND enough time has passed. However, the functions still return 0 outside of the shutdown function and setting ignore_user_abort() one way or another has no effect. In other words, the functions still can't be used to detect a browser abort and stop execution of the script at that point (after performing any required cleanup in the registered shutdown function). Previous Comments: ------------------------------------------------------------------------ [2007-06-12 19:58:42] mfshop at comcast dot net Description: ------------ Running IIS6 on Windows 2003 Server and the latest PHP 4.4.8-dev from snaps.php.net. The problem also exists on PHP 4.4.7. Running as an ISAPI module. connection_status() and connection_abort() always return 0. Setting ignore_user_abort(true) or ignore_user_abort(false) also seems to have no effect. In the example script below, changing ignore_user_abort(true) to ignore_user_abort(false) produces the exact same results. This seems to be similar or the same as Bug #30301 but for a PHP 4 instead (also that bug report seems to have been ignored/closed due to no feedback status). Reproduce code: --------------- function script_end() { global $fd; $clientstate = connection_aborted(); $clientstate2 = connection_status(); fwrite($fd, "Final: $clientstate, $clientstate2\n"); fclose($fd); exit(); } $fd=fopen("test.txt", "w"); // Change filename/dir to somewhere where the IIS User has proper permissions as necessary. register_shutdown_function("script_end"); ignore_user_abort(true); for ($i=0; $i<20; $i++) { echo "$i<br>\n"; Flush(); $clientstate = connection_aborted(); $clientstate2 = connection_status(); fwrite($fd, "$i: $clientstate, $clientstate2\n"); sleep(1); } Expected result: ---------------- Start loading the page and then hit the stop button before it finishes. Look at the test.txt afterwards. We expect to see the values returned by connection_aborted() and connection_status() to change/be something other than 0 or, depending on how ignore_user_abort() is set, we may expect to see the count not reach 20 (i.e. the script detecting user abort and terminating the script). Actual result: -------------- The test.txt file will always end up looking like so: 0: 0, 0 1: 0, 0 2: 0, 0 3: 0, 0 4: 0, 0 5: 0, 0 6: 0, 0 7: 0, 0 8: 0, 0 9: 0, 0 10: 0, 0 11: 0, 0 12: 0, 0 13: 0, 0 14: 0, 0 15: 0, 0 16: 0, 0 17: 0, 0 18: 0, 0 19: 0, 0 Final: 0, 0 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=41672&edit=1

« previous php.bugs (#113717) next »