调用 system() 命令并返回结果

Posted

技术标签:

【中文标题】调用 system() 命令并返回结果【英文标题】:Calling a system() command and bringing back the results 【发布时间】:2009-10-27 03:38:32 【问题描述】:

我每天需要多次将文件夹中的数千个大文件放入 RAR 存档中。我曾经使用带有 RAR 软件包的自定义命令通过 sFTP 手动执行此操作。

我想知道是否可以在 php 中使用 system() 来使用 RAR 命令,并每隔一秒左右返回结果以清楚地指示该过程的进度。

当您使用 RAR 命令时,它会在终端窗口中绘制一个进度条,很像 wget。我想抓住那个进度条并以某种方式将其显示在页面上。

关于如何做到这一点的任何想法?

谢谢:)

【问题讨论】:

【参考方案1】:

您可以使用PHP popen() 调用来执行进程并读取其标准输出。这将为您提供进度条。但是,使用 PHP builtin rar 支持可能会为您提供更强大的解决方案,并更好地了解问题所在和原因。

【讨论】:

从内置的PHP rar支持中可以看出,它只支持解压RAR文件,不支持存档,这是我需要做的。不过,感谢您的链接,这对我以后需要做的事情会有所帮助:)【参考方案2】:

如果您坚持使用system(),那么您能做的最好的事情就是从该过程中获取返回码。找出成功的返回码。使用它来确定您的操作实际上是否成功。

如果您使用exec() 或passthru(),您也可以获得命令的输出。

您也许可以通过popen() 使用一些魔法来获得进度条,但我不确定。

【讨论】:

【参考方案3】:

是的,popen() 可能很有用。您可以获取输出并对其进行解析以获取结果。

【讨论】:

以上是关于调用 system() 命令并返回结果的主要内容,如果未能解决你的问题,请参考以下文章

c++如何获取dos命令的返回值

如何让php执行shell

WEB安全之系统命令执行漏洞

C语言获取Shell返回结果

vb执行DOS命令并返回结果

Python 调用外部命令