应用程序的进度条

时间:2016-10-01 13:55:53

标签: php progress-bar

我已经使用我的Windows服务器实现了SAAS方案:用户可以在a website上传文件,然后Fetch.exe是在服务器中托管的in C#应用程序{{1}将上传的文件作为输入,执行并生成输出以供用户下载。

所以在我的php中,我使用Fetch.exe来包装exec

Fetch.exe

上传和执行(即exec("Fetch.exe " . $inputFile . " > " . $outputFile) )可能需要几秒钟的时间,我想向用户显示它正在处理,一切都很顺利。

我找到了一些讨论如何显示上传进度条的线程。然而,是否有人知道我可以做些什么来显示Fetch.exe的大致进展?我是否必须将其拆分为较小的应用程序并使用多个Fetch.exe

2 个答案:

答案 0 :(得分:2)

您可以为Fetch.exe提供来自php的随机生成的ID,例如来自uniqueid函数。 Fetch.exe将创建一个名为<uniqueid>.txt的文件,其中包含进度百分比。在浏览器中,您可以使用该唯一ID调用另一个脚本来获取该.txt文件的内容。按顺序,它将是这样的:

  • 用户将文件上传到PHP
  • PHP:
    • 处理上传的文件
    • 创建唯一ID
    • 使用文件和uniqueID
    • 启动Fetch.exe
    • 返回嵌入了唯一ID的页面

以下并行发生:

  • Fetch.exe创建一个名为/progress/uniqueid.txt的文本文件,其唯一ID为名称。它将进度记录到其中。
  • 浏览器对http://example.com/progress/uniqueid.txt进行AJAX调用并向用户显示进度

最后,当进度达到100%时,浏览器会下载文件。您可能想要添加的唯一内容是在一段时间后修剪进度文件。假设您每小时删除超过10分钟的所有文件。

答案 1 :(得分:1)

你的PHP程序需要一种方法来了解子进程的状态(Fetch.exe应用程序),因此,Fetch.exe需要发送有关处理状态的信息,最自然的方法是通过标准输出(标准输出是从cmd运行时提供程序的信息)。

了解这一点,您可以运行并继续阅读subprocess output from php using popen()

而且,您可以使用PHP ob_flush()flush()onmessage javascript event一起使用正在运行的php脚本从您的客户端页面建立通信,here即可找到一个关于如何做的好教程。