日期:2014-05-16  浏览次数:20479 次

跟踪上传进度PHP和JavaScript
多年来一直困扰着Web开发人员的一个问题是如何添加到他们的应用程序,如文件上传进度条,实时信息。用户是急躁;他们不想坐等,而浏览器是做一些,不知是否已被冻结或如果他们有一个缓慢的连接。提供了一个进度指示器,为用户提供有用的信息,并让他们知道到底发生了什么。
首先想到的,你可能会想办成这可以??很容易地通过首次获得从用户的计算机上文件的大小,然后执行目录所在的文件正在上传的服务器上对一些简单的计算。关于第二个想法,你会发现事情并非那么简单。
JavaScript可以访问文件的名称,类型,甚至本地图像的宽度和高度,但它直到HTML5的,它可以访问文件的大小。不幸的是,HTML5仍然不是一个完整的标准,并均匀分布在所有的浏览器不支持。一个替代的解决方案是依靠一个Flash,Java或ActiveX插件,没有感谢,我会通过。然而,另一种解决办法是安装可选PHP缓存扩展,但可能不取决于您的托管环境,它似乎像这样一个小任务,如矫枉过正。
这似乎仿佛所有的选项是与滋扰充满,任务已迅速成为一个头痛。但在尤达的话,“不......是另一个。”
我爱PHP的许多原因之一是,它使看似困难的任务变得容易。5.4 PHP的,他们所做的又一个新的配置指令集,session.upload_progress。
在这篇文章中,我会告诉你如何这个功能可以被用来创建一个简单的上传进度条没有任何外部库或浏览器的依赖。我将首先讨论它是如何工作的,然后我走过你创建的四个文件,需要完成的任务(上传的形式,一些JavaScript,一点点CSS,返回上传的地位和文件)。
会话上传进度
除了 ??一般的要求,允许上传文件,有两个跟踪进度。必须启用session.upload_progress.enabled指令和你所指定的名称的网页表单中必须有一个隐藏的场session.upload_progress.name指令。当session.upload_progress.enabled是真实的(因为它默认是在PHP 5.4,大概超出)的$ _POST [ session.upload_progress.name期间发送上传,文件传输的信息是在$ _SESSION的超全局阵列。
的print_r()的输出了$ _SESSION数组将类似于下列文件传输过程中:

Array
(
    [upload_progress_myForm] => Array
        (
            [start_time] => 1323733740
            [content_length] => 721127769
            [bytes_processed] => 263178326
            [done] => 
            [files] => Array
                (
                    [0] => Array
                        (
                            [field_name] => userfile
                            [name] => ubuntu-10.04.3-desktop-i386.iso
                            [tmp_name] => 
          &nbs