Я работаю над аналогичной проблемой. Я должен проанализировать вывод моего скрипта конвертации видео. Я использую popen
и анализирую вывод возвращенных resource
. Сначала я использовал fgets
, но обновленные значения не распознавались как новые строки. Поэтому я создал простую функцию, которая принимает необязательный $arg_delimiter
, чтобы вы могли проверять другие типы возврата, такие как chr(13)
возврат cariage. Пример кода немного изменен и поэтому не проверен, потому что в моем случае эти функции были методами моего объекта синтаксического анализатора.
function get_line ($arg_handle, $arg_delimiter = NULL)
{
$delimiter = (NULL !== $arg_delimiter) ? $arg_delimiter : chr(10);
$result = array();
while ( ! feof($arg_handle))
{
$currentCharacter = fgetc($arg_handle);
if ($delimiter === $currentCharacter)
{
return implode('', $result);
}
$result[] = $currentCharacter;
}
return implode('', $result);
}
Я просто перебираю результаты из popen()
resource
следующим образом:
$command = '/usr/bin/yourcommand';
$handle = popen($command . ' 2>&1', 'r');
while ( ! feof($handle))
{
$line = get_line($handle, chr(13));
preg_match($yourParserRegex, $line, $data);
if (count($data) > 0)
{
printf("<script type='text/javascript'>\n //<![CDATA[\n window.alert('Result: %s');\n // ]]>\n</script>"
,$data[1]
);
flush();
}
}
Теперь все, что вам нужно сделать, это выяснить, кометы вещи.