背景: 我想写一个使用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