YaBog
Новичок
Вобщем суть в следующем.
Есть консольная программа, она требует ввода параметров постепенно. Причем нужно точно знать что она пишет в ответ.
Ты скажешь это просто, юзай proc_open. Ок. Я его и юзаю. Но только проблема в том, что когда я читаю то что выдала прога, чтение зависает...
На строчке $out .= fgets($pipes[1], 1024); скрипт зависает намертво, а почему? Потому что прога отдает свой вывод, и дальше ждет ввода, а мы пытаемся читать из нее...
Я отправился на php.net и там прочитал в одном из последних вариантов, как человек так работал с клиентом eDonkey. Так вот, он по 2 символа читал отдачу, и в случае когда получал "> " прекращал цикл.
Мне к сожелению это не подходит, так как прога иногда в выводе возращает обращение к самой себе. Получается что в выводе встретитсья 2 раза "> " и вот как быть, я не знаю....
Есть ли какой нибудь timeout для fgetss? Или как решить проблему?
Есть консольная программа, она требует ввода параметров постепенно. Причем нужно точно знать что она пишет в ответ.
Ты скажешь это просто, юзай proc_open. Ок. Я его и юзаю. Но только проблема в том, что когда я читаю то что выдала прога, чтение зависает...
PHP:
<?php
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("pipe", "w")
);
$process = proc_open('console.exe', $descriptorspec, $pipes);
if (is_resource($process)) {
stream_set_blocking($pipes[1], FALSE);
$out = '';
while (!feof($pipes[1])) {
$out .= fgets($pipes[1], 1024);
}
echo $out;
}
Я отправился на php.net и там прочитал в одном из последних вариантов, как человек так работал с клиентом eDonkey. Так вот, он по 2 символа читал отдачу, и в случае когда получал "> " прекращал цикл.
Мне к сожелению это не подходит, так как прога иногда в выводе возращает обращение к самой себе. Получается что в выводе встретитсья 2 раза "> " и вот как быть, я не знаю....
Есть ли какой нибудь timeout для fgetss? Или как решить проблему?