在PHP中创建文件进度栏

时间:2020-03-06 14:59:21  来源:igfitidea点击:

有谁知道用PHP创建文件上传进度条的任何方法吗?我经常听到这是不可能的。

我有一个主意,但不确定是否可行:上传正常的文件,但提交至iframe。提交后,将文件信息(大小和临时位置)存储在会话中。同时,每隔10秒启动一次AJAX调用,以检查文件大小与会话中存储的大小。这会将大小返回给AJAX,然后将调整进度条的大小,并可能向用户显示上载的大小。

有什么想法吗?

解决方案

在纯PHP中,我们是对的:这是不可能的。

如果我们对此进行AJAX验证,则可以按照描述进行操作。我见过的唯一进度表是Javascript或者Flash,尽管我认为Silverlight也可以做到。

"老派",但使用PHP + Perl技术:http://www.raditha.com/php/progress.php

我们几乎已经知道如何做到这一点。主要的问题是,通常在完成上传之前,我们无法访问已上传文件的大小。

有解决方法:
启用APC时,如果包含一个名为" APC_UPLOAD_PROGRESS"的字段并使用apc_fetch()来检索状态为的缓存条目,则可以访问此信息。

还有一个名为uploadprogress的插件,但是它没有很好的文档说明,并且在Windows上不起作用(我最后还是检查了一下)。

一种替代方法是使用Flash来实现。请参阅FancyUpload之类的脚本。

在APC出现之前,我必须用C编写一个CGI脚本,该脚本将信息写入文本文件。不过,APC现在似乎是一种更好的方法。

希望这可以帮助。

到目前为止,最常用的方法是SWFUpload:http://www.swfupload.org/

但是,使用纯PHP是可能的,只是非常困难且非常试验。我将查看是否可以找到该链接。

编辑:
根据php.net上的评论,从5.2开始,有一个钩子可以处理上传进度。 http://us.php.net/features.file-upload#71564

更多说明:

  • http://www.dinke.net/blog/2006/11/04/php-52-upload-progress-meter/zh/
  • http://blog.liip.ch/archive/2006/09/10/upload-progress-meter-extension-for-php-5-2.html

拉斯姆斯的例子:

  • http://progphp.com/progress.phps

我认为,最好/最简单的解决方案是构建一个小的Flash小部件,该小部件由"上传"按钮和进度条组成。 Flash会为我们提供到目前为止到目前为止已上传多少数据的非常详细的反馈,我们可以基于此构建漂亮的进度条。不需要对服务器进行低效率的轮询,并且实际上根本不需要对服务器代码进行任何更改。 Google的" Flash上​​载器",我们会发现许多人已经编写了这些小部件,并乐意以高价将它们出售给我们。

我建议我们查看SWFUpload以完成所需的操作。它相当灵活,并且支持文件排队,因此我们甚至可以处理多文件上传。

我们可以尝试使用YUI或者Prototype或者JQuery

我们一定会喜欢digitgerald的FancyUpload。它基于Mootools和swfuplaod,并且具有状态,进度,eta等良好的队列。这确实是我所见过的上传文件最巧妙的方法。对于我的个人用例,iv使用它来让客户端选择1.2 gb的PDF文件并上载它们。较新的版本会自动重命名和版本控制,会被跳过,等等。