2008-10-01 103 views
5

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

我有一个想法,但不知道它是否会工作:有一个正常的文件上传,而是提交给一个iframe。提交时,将文件信息(大小和临时位置)存储在会话中。同时,每10秒开始一次AJAX调用,以检查文件大小与会话中存储的大小之比。这会将大小返回到AJAX,然后会调整进度条的大小,并向用户显示上传的大小。

想法?

回答

3

您可以尝试YUIPrototypeJQuery

+0

jQuery看起来是最好的方式! Thxs,不知道它有一个插件。 – 2008-10-01 19:58:31

0

在纯PHP中,您是正确的:这是不可能的。

如果你AJAX-如果这样,那么你可以做你所描述的。我见过的唯一的进度计是Javascript或Flash,但我想Silverlight也可以做到这一点。

6

你几乎想出如何做到这一点。主要问题是,在上传完成之前,您通常无法访问上传文件的大小。

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

还有一个名为uploadprogress的插件,但它没有很好的文档记录,并且在Windows上不工作(最后我检查了)。

另一种方法是使用Flash进行此操作。请参阅FancyUpload这样的脚本。

在APC出现之前,我不得不写一个C语言的CGI脚本,它将信息写入文本文件。不过,现在APC似乎是一种更好的方式。

希望这会有所帮助。

+0

当我看到这个问题,APC的上传进度的事情来考虑为好。我知道Rasmus甚至为它创建了一个样本,但我现在找不到它。 – Powerlord 2008-10-01 18:04:32

+0

Rasmus:http://progphp.com/progress.phps – davethegr8 2008-10-01 18:14:29

5

到目前为止,这样做的最常见的方式是SWFUpload的:http://www.swfupload.org/

然而,可以用纯PHP,只是非常困难,非常实验。我会看看我能否找到链接。

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

更多说明:

拉斯穆斯实施例:

0

在我看来,最好的/最简单的解决方案是构建一个小型Flash小部件,它包含一个'Upload'按钮和一个进度条。 Flash为您提供了非常详细的反馈,说明迄今为止已上传了多少数据,并且您可以基于此建立良好的进度条。不需要对服务器进行低效的轮询,事实上根本不需要对服务器代码进行任何更改。谷歌的'闪光上传',你会发现很多人已经写了这些小部件,并很乐意把它们出售给你,以降压。

0

我建议看看SWFUpload来完成你想要的。它非常灵活,支持文件排队,所以你甚至可以处理多文件上传。

0

你一定会想要去与digitgerald's FancyUpload。这是基于swfuplaod的Mootools &,并且它具有状态,进度,eta等等的一个很好的队列。它真的是我见过的用于上传文件的最光滑的方法。对于我个人用例ivé使用它来让客户选择1.2 GB的PDF文件并上传它们。较新的获得改名和自动版本,同样被跳过,等