背景: 我想寫一個使用PHP的shell腳本,將自動簽出幾個大的SVN回購。我也使用PEAR控制檯進度條類來顯示結帳的進度(不是完全必要的,但提示我的問題)。獲取PHP更新與從命令返回的每一行
問: 是否有一種方式來運行一個循環,將每行輸出到標準輸入的命令行更新?
如果我做
<?php shell_exec("svn co svn://my.repo.com/repo/trunk"); ?>
我找回所有的命令在一個巨大的字符串輸出。 嘗試像
<?php $bar = new Console_ProgressBar('%fraction% [%bar%] %percent% | %elapsed% :: %estimate%', '=>', ' ', 80, $total);
$bar->display(0);
stream_set_blocking(STDIN, 0);
$output = array();
$return = '';
exec("svn co $svnUrl $folder", $output, $return);
while (!isset($return))
{
$bar->update(count($output));
}
$bar->erase(); ?>
將顯示欄但不更新。
任何解決方案?
更新=================== ====================
這是我想出了基於答案的工作代碼(備查):
<?php
$bar = new Console_ProgressBar('%fraction% [%bar%] %percent% | %elapsed% :: %estimate%', '=>', ' ', 80, $total);
$handle = popen("/usr/bin/svn co $svnUrl $folder", 'r');
$elapsed = 0;
$bar->display($elapsed);
while ($line = fgets($handle))
{
$elapsed++;
$bar->update($elapsed);
}
pclose($handle);
?>
popen()看起來像我所需要的。感謝你的回答。 – CEich