我确定之前已经问过这个问题,但是我似乎无法找到一个好的答案,我在这里,再问一次。 :)
有没有办法只使用HTML,JavaScript / AJAX和PHP的混合来报告文件上传的实际进度?
回复任何建议使用SWFUpload或类似内容的人:
我知道这一切。走在那条路上。我正在寻找一个100%纯粹的解决方案(是的,我知道我可能不会得到它)。
答案 0 :(得分:5)
使用PHP / Javascript监控文件上传需要PECL扩展名:
向用户显示进度所需代码的一个很好的示例是:
如果我没弄错的话,它会使用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)