php 如何在不使用任何插件的情况下获取文件上传进度?

 我来答
根号叁科技
推荐于2018-04-09 · 知道合伙人软件行家
根号叁科技
知道合伙人软件行家
采纳数:200 获赞数:1123
本科毕业于山东理工大学物理学专业,硕士就读于南京理工大学模式识别与智能系统。

向TA提问 私信TA
展开全部

通过HTTP上传文件是一个麻烦事情,浏览器在上传文件过程中不能返回太多的有用信息给用户,由于这个原因,很多用户在不知道进度的条件下选择关闭页面中断上传,以为对他们来说他们不知道要等多久才能够上传完成的.最近几年ajax技术的流行,很多解决方法也应运而生.基本上的解决方式我们能够在没秒钟向浏览器发送一个状态码.


在php编程领域不同的程序员尝试了不同的解决方法.

第一个解决方法:在apc里面实现

第二个解决方法:通过一个php拓展实现

这二个解决方法都很好,但是很少人去采用他们,为什么呢?

主要有二个原因:

1.对于php而言他们都不是php原生的,在他们使用这个之前需要自己去安装拓展

2.他们使用一个本地的内存去传递传递,apc使用系统共享的内存,upload_progress插件使用文件系统的内存.他们都不是很符合php这种专门的web语言的特性


最完美的解决方案是我们可以通过php的session handling system来解决.

php的session系统是php系统的一部分,它可以使用不同的内存来分配处理,比如当前文件系统和memcache.在集群和负载均衡中共享session是非常有用的.

Arnaud leBaln认真思考后创建一个完整的实现了文件上传进度内存分配的功能并且可能会被纳入下个php版本中.

长话短说:在下个版本(5.4?)我们可能就会看到文件上传进度机制在里面


Arnaud编写了一个非常完美的帮助文档来解释这些功能.我们可以配置PHP的选项来使用这些特性,实现我们要确定我们的默认属性

 

session.upload_progress.enabled = 1 
session.upload_progress.prefix = upload_progress_
session.upload_progress.name = PHP_SESSION_UPLOAD_PROGRESS

 

 

当我们使用的时候,我们需要创建一个如下HTML格式的表单

 

<form action="upload.php" method="POST" enctype="multipart/form-data">
 <input type="hidden"
        name="<?php echo ini_get("session.upload_progress.name"); ?>" 
       value="johannesupload" />
<input type="file" name="file1" />
<input type="file" name="file2" />
<input type="submit" />
</form>


 

 

当我们上传一个文件的时候,这个文件足够大,我们的服务器会周期性的读取$_SESSION['upload_progress_johanesupload']的值,这个完整的内容在Arnaud编写的帮组文档都有完整的说明,我在这里也不重复了
不久的将来我们就可以抛弃apc这种解决方案


声明:这篇文章所描述的特性并没有包含在当前稳定的php软件里面.这些特性和使用方法都可能会改变。

ps: 就我而言 我觉得文件上传的进度控制浏览器自己就要返回数据给用户,并且提供一个退出按钮来结束上传。

    现在和jQyery插件都可以来完成上传进度的控制但是基本上都是基于flash技术来实现,所以php自己如果能提供一种比较完美的解决方案的话

    开发人员就可以省去很多麻烦.

匿名用户
2014-12-03
展开全部
不能。上传进度不是服务器监控的,是本地监控的,所以和前端有关系,一般用flash,连js都不是很容易做到。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
晓刚博士
2014-12-01 · TA获得超过236个赞
知道小有建树答主
回答量:354
采纳率:0%
帮助的人:219万
展开全部
没办法的 必须使用插件 要么就需要自己写 ,不用插件很麻烦
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
JovenShao
2014-12-01 · TA获得超过514个赞
知道小有建树答主
回答量:1161
采纳率:80%
帮助的人:618万
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
279838089
2014-12-01 · TA获得超过2801个赞
知道大有可为答主
回答量:2818
采纳率:50%
帮助的人:1716万
展开全部
要用flash,你不会flash,最好用插件
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式