1--TEST-- 2Bug #78883 (fgets(STDIN) fails on Windows) 3--SKIPIF-- 4<?php 5if (PHP_OS_FAMILY !== 'Windows') die('skip this test is for Windows platforms only'); 6if (getenv("SKIP_SLOW_TESTS")) die("skip slow test"); 7?> 8--FILE-- 9<?php 10$descriptorspec = array( 11 0 => array("pipe", "rb"), 12 1 => array("pipe", "wb"), 13 //2 => array("file", "stderr.txt", "ab") 14); 15$pipes = []; 16$cmd = 'cmd.exe "/c START ^"^" /WAIT ' . PHP_BINARY . ' -r ^"var_dump(fgets(STDIN));"'; 17$proc = proc_open($cmd, $descriptorspec, $pipes); 18var_dump(is_resource($proc)); 19$pid = proc_get_status($proc)['pid']; 20sleep(3); 21$bug_is_present = !proc_get_status($proc)['running']; 22if (!$bug_is_present) { 23 // if the bug is not present, it will hang waiting for stdin, 24 // thus cmd is still running and we should kill it 25 shell_exec("taskkill /T /F /PID {$pid} 2>nul"); 26} 27fclose($pipes[0]); 28fclose($pipes[1]); 29proc_close($proc); 30var_dump($bug_is_present); 31?> 32--EXPECT-- 33bool(true) 34bool(false) 35