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 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.


Previous Comments:
------------------------------------------------------------------------

[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

Reply via email to