Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 应用程序的进度条_Php_Progress Bar - Fatal编程技术网

Php 应用程序的进度条

Php 应用程序的进度条,php,progress-bar,Php,Progress Bar,我已经在我的Windows服务器上实现了一个SAAS场景:用户可以在中上载一个文件,然后Fetch.exe是一个在服务器中托管的应用程序,在C#中编码为,Fetch.exe将上载的文件作为输入,执行并为用户生成一个要下载的输出 因此,在我的php中,我使用exec包装Fetch.exe: exec("Fetch.exe " . $inputFile . " > " . $outputFile) 上载和执行(即,Fetch.exe)可能需要几秒钟以上的时间,我想向用户展示它正在处理,一切都

我已经在我的Windows服务器上实现了一个SAAS场景:用户可以在中上载一个文件,然后
Fetch.exe
是一个在服务器中托管的应用程序,在C#中编码为
Fetch.exe
将上载的文件作为输入,执行并为用户生成一个要下载的输出

因此,在我的php中,我使用
exec
包装
Fetch.exe

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


我发现了一些讨论如何显示上传进度条的帖子。然而,有人知道我能做些什么来显示
Fetch.exe
的大致进度吗?我是否必须将其拆分为更小的应用程序并使用几个
exec

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

  • 用户将文件上传到PHP
  • PHP:
    • 处理上载的文件
    • 创建唯一ID
    • 使用文件和唯一ID启动Fetch.exe
    • 返回嵌入唯一ID的页面
以下情况同时发生:

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

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

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

知道了这一点,你可以跑步并继续阅读


第二,你可以使用PHP和,通过运行的PHP脚本从客户端页面建立通信,你可以找到一个很好的教程来说明如何做到这一点。

Fetch.exe的输出实际上是什么样子的?它只是一个文本,可以是短的,也可以是长的。要处理
inputFile
并生成是文本,由于后面的分析,可能需要几秒钟以上的时间…您需要一个百分比的进度,或者只需要一个“正在加载”信息?@Cesar一个大概的百分比会更好。。。