From:             larryjadams at comcast dot net
Operating system: WindowsXP Pro SP2
PHP version:      5.0.5
PHP Bug Type:     Scripting Engine problem
Bug description:  stream_select() in conjuntion with popen() does not appear to 
work

Description:
------------
If I call $my_fd = popen("mycommand", "rb"); to a function that
hangs/suspends and then subsquently call:

stream_select(...) using $read=array($my_fd) with a timeout, the
steam_select returns immediately, event if I have set $my_fd as blocking
using stream_set_blocking();

I would like stream_select to wait on output from the pipe prior to
firing, or to drive a timeout.

Thanks,

Larry Adams
The Cacti Group

Reproduce code:
---------------
if (function_exists("stream_select")) {
  if ($config["cacti_server_os"] == "unix")  {
    $fp = popen($command, "r");
  }else{
    $fp = popen($command, "rb");
  }

  /* set script server timeout */
  $script_timeout = read_config_option("script_timeout");

  /* establish timeout variables */
  $to_sec = floor($script_timeout/1000);
  $to_usec = ($script_timeout%1000)*1000;

  /* Prepare the read array */
  $read = array($fp);

  stream_set_blocking ($fp, 1);
  if (false === ($num_changed_streams = stream_select($read, $write =
NULL, $except = NULL, $to_sec, $to_usec))) {
    cacti_log("WARNING: SERVER POPEN Timed out.");
    $output = "U";
  }elseif ($num_changed_streams > 0) {
    $output = fgets($fp, 4096);
  }

  pclose($fp);
}else{
  $output = `$command`;
}

$command = a file with the following:

<?php sleep(20); echo "Hello:20.00\n"; ?>

The stream_select timeout is 5 seconds.


Expected result:
----------------
popen will be called, stream_select will block until timeout has expired,
the number of fd's changed will be 0 and my result will be as expected.

Actual result:
--------------
stream_select returns immediately.

-- 
Edit bug report at http://bugs.php.net/?id=35131&edit=1
-- 
Try a CVS snapshot (php4):   http://bugs.php.net/fix.php?id=35131&r=trysnapshot4
Try a CVS snapshot (php5.0): 
http://bugs.php.net/fix.php?id=35131&r=trysnapshot50
Try a CVS snapshot (php5.1): 
http://bugs.php.net/fix.php?id=35131&r=trysnapshot51
Fixed in CVS:                http://bugs.php.net/fix.php?id=35131&r=fixedcvs
Fixed in release:            http://bugs.php.net/fix.php?id=35131&r=alreadyfixed
Need backtrace:              http://bugs.php.net/fix.php?id=35131&r=needtrace
Need Reproduce Script:       http://bugs.php.net/fix.php?id=35131&r=needscript
Try newer version:           http://bugs.php.net/fix.php?id=35131&r=oldversion
Not developer issue:         http://bugs.php.net/fix.php?id=35131&r=support
Expected behavior:           http://bugs.php.net/fix.php?id=35131&r=notwrong
Not enough info:             
http://bugs.php.net/fix.php?id=35131&r=notenoughinfo
Submitted twice:             
http://bugs.php.net/fix.php?id=35131&r=submittedtwice
register_globals:            http://bugs.php.net/fix.php?id=35131&r=globals
PHP 3 support discontinued:  http://bugs.php.net/fix.php?id=35131&r=php3
Daylight Savings:            http://bugs.php.net/fix.php?id=35131&r=dst
IIS Stability:               http://bugs.php.net/fix.php?id=35131&r=isapi
Install GNU Sed:             http://bugs.php.net/fix.php?id=35131&r=gnused
Floating point limitations:  http://bugs.php.net/fix.php?id=35131&r=float
No Zend Extensions:          http://bugs.php.net/fix.php?id=35131&r=nozend
MySQL Configuration Error:   http://bugs.php.net/fix.php?id=35131&r=mysqlcfg

Reply via email to