ID: 35131 User updated by: larryjadams at comcast dot net Reported By: larryjadams at comcast dot net -Status: Feedback +Status: Open Bug Type: Streams related Operating System: WindowsXP Pro SP2 PHP Version: 5CVS-2005-11-07 (snap) Assigned To: wez New Comment:
The set block option now works. However, the stream select still waits for the script to return or for ever, whichever comes first :). Here is the revised code. Simply place test1.php and test2.php in the c:\ directory. test1.php <?php $command = "php -q c:/test2.php"; if (function_exists("stream_select")) { $fp = popen($command, "rb"); /* set script server timeout in milliseconds */ $script_timeout = 5000; /* 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))) { echo "WARNING: SERVER POPEN Timed out.\n"; $output = "U"; }elseif ($num_changed_streams > 0) { $output = fgets($fp, 4096); echo "Command Exited with a Result of '" . trim($output) . "'\n"; } pclose($fp); }else{ $output = `$command`; } ?> test2.php <?php sleep(20);echo "Ehllo\n"; ?> TheWitness Previous Comments: ------------------------------------------------------------------------ [2007-07-17 14:30:41] [EMAIL PROTECTED] Please try using this CVS snapshot: http://snaps.php.net/php5.2-latest.tar.gz For Windows (zip): http://snaps.php.net/win32/php5.2-win32-latest.zip For Windows (installer): http://snaps.php.net/win32/php5.2-win32-installer-latest.msi ------------------------------------------------------------------------ [2005-11-07 15:31:28] [EMAIL PROTECTED] Assigned to the author of this part. ------------------------------------------------------------------------ [2005-11-07 02:09:19] larryjadams at comcast dot net I have attempted to resolve the issue with the latest CVS. However, it does not solve the issue. The stream_select fires right away even though the popen does not have anything waiting on the pipe. The version I tested was: PHP 5.1.0RC5-dev (cli) (built: Nov 7 2005 00:47:12) Copyright (c) 1997-2005 The PHP Group Zend Engine v2.1.0-dev, Copyright (c) 1998-2005 Zend Technologies I have noted some other issues that I will be opening separate tickets one. ------------------------------------------------------------------------ [2005-11-06 22:07:19] larryjadams at comcast dot net 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 this bug report at http://bugs.php.net/?id=35131&edit=1