使用纯PHP / AJAX上传进度?

时间:2009-03-17 04:59:43

标签: php ajax upload

我确定之前已经问过这个问题,但是我似乎无法找到一个好的答案,我在这里,再问一次。 :)

有没有办法只使用HTML,JavaScript / AJAX和PHP的混合来报告文件上传的实际进度?

回复任何建议使用SWFUpload或类似内容的人:

我知道这一切。走在那条路上。我正在寻找一个100%纯粹的解决方案(是的,我知道我可能不会得到它)。

6 个答案:

答案 0 :(得分:5)

使用PHP / Javascript监控文件上传需要PECL扩展名:

  

uploadprogress

向用户显示进度所需代码的一个很好的示例是:

  

Uber Uploader

如果我没弄错的话,它会使用JQuery与PHP进行通信。


你也可以自己写,不是那么复杂。

添加隐藏元素作为上传表单的第一个元素,名为UPLOAD_IDENTIFIER

轮询调用uploadprogress_get_info( UPLOAD_IDENTIFIER )的PHP脚本 它返回一个包含以下内容的数组:

time_start     - The time that the upload began (unix timestamp),
time_last      - The time that the progress info was last updated,
speed_average  - Average speed in bytes per second,
speed_last     - Last measured speed in bytes per second,
bytes_uploaded - Number of bytes uploaded so far,
bytes_total    - The value of the Content-Length header sent by the browser,
files_uploaded - Number of files uploaded so far,
est_sec        - Estimated number of seconds remaining.

让PHP将信息返回给Javascript,你应该有足够的信息。 根据受众的不同,您可能不会使用所有可用信息。

答案 1 :(得分:2)

如果您安装了APC(此时,您确实应该这样做;它在PHP6中是标准的),它可以选择启用上传跟踪。 有some documentation,Rasmus编写了一个使用YUI的code sample

答案 2 :(得分:1)

  

有没有办法只使用HTML,JavaScript / AJAX和PHP的混合来报告文件上传的实际进度?

我不知道在加载webserver的PHP中监视纯HTML(multipart / form-data)文件上传的方法。

您需要在数据进入时访问multipart / form-data解析器的进度,但这看起来不可能,因为从PHP访问HTTP请求主体的方式($HTTP_RAW_POST_DATA和{{3记录为“不适用于enctype =”multipart / form-data“”。

您可以使用上传字段php://input在Firefox中执行脚本辅助文件上传,以获取要以分段或非多部分方式提交的文件内容。仍然需要解析一堆工作。

(您甚至可以将PHP脚本作为独立服务器运行在另一个端口上,仅用于接收文件上传,使用您自己的HTTP处理代码。但这是一项相对较少增益的大量工作。)

答案 3 :(得分:1)

如果您能够将PECL包添加到PHP中,那么就会有uploadprogress包。

最简单的方法是使用swfupload。

答案 4 :(得分:0)

我建议您尝试五次FancyUpload尝试这是一个非常酷的进度条解决方案,它不是必须附加到PHP。还可以在digitarald.de

查看其他工具

欢呼声

答案 5 :(得分:-1)

恕我直言,这是Web浏览器应该解决的问题。我们有下载进度表,为什么不上传呢?

以此为例:

http://www.fireuploader.com/