php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #64770 stream_select() fails with pipes from proc_open()
Submitted: 2013-05-03 11:02 UTC Modified: 2013-05-03 11:03 UTC
From: [email protected] Assigned: ab (profile)
Status: Closed Package: Streams related
PHP Version: 5.5Git-2013-05-03 (Git) OS: Windows x64
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: [email protected]
New email:
PHP Version: OS:

 

 [2013-05-03 11:02 UTC] [email protected]
Description:
------------
When proc_open() delivers the pipes for a process, an attempt to stream_select on them fails. However using stream_get_contents() on the same readable pipes (like stdout) works fine. This bug currently prevents the phpt test suite from running on windows x64.

Test script:
---------------
<?php

$descs = array(
	0 => array('pipe', 'r'), // stdin
	1 => array('pipe', 'w'), // stdout
	2 => array('pipe', 'w'), // strerr
);

$other_opts = array('suppress_errors' => false, 'binary_pipes' => true);

$p = proc_open('dir', $descs, $pipes, '.', NULL, $other_opts);
var_dump($p);

if (is_resource($p)) {
	$data = '';

	while (1) {	
		$n = stream_select($pipes, $w = NULL, $e = NULL, 300);
		var_dump($n);

		if ($n === false) {
			echo "no streams \n";
			break;
		} else if ($n === 0) {
			echo "process timed out\n";
			proc_terminate($p, 9);
			break;
		} else if ($n > 0) {
			$line = fread($pipes[1], 8192);
			if (strlen($line) == 0) {
				/* EOF */
				break;
			}
			$data .= $line;
		}
	}
	var_dump(strlen($data));

	$ret = proc_close($p);
	var_dump($ret);
}
?>
==DONE==


Expected result:
----------------
resource(7) of type (process)
int(5)
int(42)
int(0)
==DONE==

Actual result:
--------------
resource(7) of type (process)

Warning: stream_select(): unable to select [2]: No such file or directory (max_fd=5) in C:\php-sdk\php55\vc11\x64\php-src\stream_select_0.php on line 18
bool(false)
no streams
int(0)
int(255)
==DONE==

Patches

bug64770.phpt (last revision 2013-11-14 10:14 UTC by s_kinon at yahoo dot com)

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2013-05-03 11:03 UTC] [email protected]
This might also be related to bug #63922 or bug #44908 or both.
 [2013-05-03 11:03 UTC] [email protected]
-Assigned To: +Assigned To: ab
 [2013-05-03 15:06 UTC] [email protected]
Automatic comment on behalf of ab
Revision: http://git.php.net/?p=php-src.git;a=commit;h=b1ea0b7a7a580f074d889f9ff7a46566917088f2
Log: Fixed bug #64770 stream_select() fails with pipes
 [2013-05-03 15:06 UTC] [email protected]
-Status: Assigned +Status: Closed
 [2014-10-07 23:19 UTC] [email protected]
Automatic comment on behalf of ab
Revision: http://git.php.net/?p=php-src-security.git;a=commit;h=b1ea0b7a7a580f074d889f9ff7a46566917088f2
Log: Fixed bug #64770 stream_select() fails with pipes
 [2014-10-07 23:30 UTC] [email protected]
Automatic comment on behalf of ab
Revision: http://git.php.net/?p=php-src-security.git;a=commit;h=b1ea0b7a7a580f074d889f9ff7a46566917088f2
Log: Fixed bug #64770 stream_select() fails with pipes
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Sun Jul 20 12:00:03 2025 UTC