1--TEST-- 2Bug #60602 proc_open() modifies environment if it contains arrays 3--FILE-- 4<?php 5 6$descs = array( 7 0 => array('pipe', 'r'), // stdin 8 1 => array('pipe', 'w'), // stdout 9 2 => array('pipe', 'w'), // strerr 10); 11 12$environment = array('test' => array(1, 2, 3)); 13 14$cmd = (substr(PHP_OS, 0, 3) == 'WIN') ? 'dir' : 'ls'; 15$p = proc_open($cmd, $descs, $pipes, '.', $environment); 16 17if (is_resource($p)) { 18 $data = ''; 19 20 while (1) { 21 $w = $e = NULL; 22 $n = stream_select($pipes, $w, $e, 300); 23 24 if ($n === false) { 25 echo "no streams \n"; 26 break; 27 } else if ($n === 0) { 28 echo "process timed out\n"; 29 proc_terminate($p, 9); 30 break; 31 } else if ($n > 0) { 32 $line = fread($pipes[1], 8192); 33 if (strlen($line) == 0) { 34 /* EOF */ 35 break; 36 } 37 $data .= $line; 38 } 39 } 40 var_dump(strlen($data)); 41 42 $ret = proc_close($p); 43 var_dump($ret); 44 var_dump(is_array($environment['test'])); 45} else { 46 echo "no process\n"; 47} 48?> 49==DONE== 50--EXPECTF-- 51Notice: Array to string conversion in %s on line %d 52 53Notice: Array to string conversion in %s on line %d 54int(%d) 55int(0) 56bool(true) 57==DONE== 58