Gorynych
Посетитель PHP-Клуба
Destroyer сдается мне, что проблема:
а) с определением stderr
б) с циклом чтения
в) лучше все же закрывать stdin
а) с определением stderr
б) с циклом чтения
в) лучше все же закрывать stdin
PHP:
set_time_limit(600); // Как у нас с лимитом на временя выполнения?
$descriptorspec = array(
0 => array("pipe", "r"), // stdin
1 => array("pipe", "w"), // stdout
2 => array("file", "error_log", "a") // stderr, если не нужно - то в качестве файла указываем "null" или "/dev/null"
);
$cmd = 'dir';
// команда полностью выглядит как dir "C:\\Program Files"
// - окружаем ковычками параметр, содержащий пробелы
$cmd = sprintf('%s "%s"', $cmd, "C:\\Program Files");
stream_set_blocking($pipes[1], FALSE);
if (is_resource($process)) {
fclose($pipes[0]); // не обязательно, но формализм не всегда мешает :-)
// вот этот вариант ошибочный, он не выведет полный листинг,
// а обломается :-)
// while ( ($s = fgets($pipes[1], 2)) ) {
// echo $s;
// }
// а вот так - результат будет лучше:
while ( !feof($pipes[1]) ) {
$s = fgets($pipes[1], 2);
echo $s;
}
fclose($pipes[1]);
proc_close($process);
}