ID: 42585
Comment by: atomiku at gmail dot com
Reported By: csaba at alum dot mit dot edu
Status: Assigned
Bug Type: COM related
Operating System: Win XP Pro
PHP Version: 5.2.4
Assigned To: wharmby
New Comment:
I'm going to take back my previous comment, turns out if you try to
view the POST data in firebug of an ajax call which is hanging (while
loop or whatever), it'll screw it up, mess the cookies up and do some
weird stuff. Please delete this comment and my previous comment.
Previous Comments:
------------------------------------------------------------------------
[2008-10-21 19:43:18] atomiku at gmail dot com
I seem to be experiencing this too, this is in my opinion CRITICAL.
In the class, it's supposed to die... picture something like this:
$someClass->someFunc(); //someFunc is supposed to die.
while (true) {
echo "Test";
sleep(5);
die();
}
It actually makes it to the while loop, doesn't print "test" though, it
just stops for 5 seconds. If I change to sleep(10), it stops for 10
seconds. No idea what is going on here.
------------------------------------------------------------------------
[2007-09-07 11:04:43] [EMAIL PROTECTED]
Assigned to the COM maintainer.
------------------------------------------------------------------------
[2007-09-07 09:49:16] csaba at alum dot mit dot edu
Description:
------------
If I have a COM object call into PHP (via com_event_sink or IE's
window.setTimeout) with a die() within the called code, then PHP hangs.
In the example below, IE comes up and waits around for 4 seconds, after
which an $ie->quit() is issued. In the event handler (function
OnQuit()) a die() is issued. While IE does shut down, PHP does not
return me the command prompt. This is from PHP CLI, of course.
Csaba Gabor from Vienna
Reproduce code:
---------------
<?php
class IESink {
public $terminated = false;
public function TitleChange($text) {
echo("title has changed: $text \n"); }
public function OnQuit() {
print "Quitting\n";
die();
print "Died\n";
$this->terminated = true;
} }
$ie = new COM("InternetExplorer.Application");
$ie->Visible = true;
$sink = new IESink;
com_event_sink($ie, $sink, "DWebBrowserEvents2");
$ie->Navigate("http://www.php.net/");
$start = time();
$quitted = false;
while (!$sink->terminated) {
com_message_pump(200);
if (time()-$start>4 && !$quitted) {
$quitted=true;
$ie->quit(); } }
print "Finished!\n";
?>
Expected result:
----------------
I expect to be shown the following three lines, ie to go away, AND for
PHP to terminate:
title has changed: PHP: Hypertext Preprocessor
title has changed: PHP: Hypertext Preprocessor
Quitting
Actual result:
--------------
The above 3 lines are shown, IE goes away, BUT php does not terminate.
Also, note that if I manually shut IE down, instead of waiting the 4
seconds, then I get the following additional line (and PHP still hangs
the cmd prompt):
Fatal error: Call to undefined method com::quit() in Unknown on line 0
It seems to me that the while loop stays active, since that's the only
place that $ie->quit() is issued.
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=42585&edit=1