用PHP上传进度条

Jos*_*ren 79 php upload progress-bar

有谁知道如何在PHP中上传进度条?我正在尝试为相册上传器编写代码.我希望在上传照片时显示进度条.

我是一个相当新的PHP所以我不知道它的一切.

Jes*_*sse 70

到目前为止(谷歌搜索和尝试脚本的时间)最简单的设置和最好的上传我发现

https://github.com/FineUploader/fine-uploader

它不需要APC或任何其他外部PHP库,我可以在共享主机上获得文件进度反馈,并声称支持html5拖放(个人未经测试)和多个文件上传.

  • 你会想要使用它而不是我相信:https://github.com/valums/file-uploader - 同一作者. (11认同)
  • 请参阅[会话上传进度](http://www.php.net/manual/en/session.upload-progress.php),这是PHP提供的,用于获取开箱即用的文件上传进度. (5认同)
  • @jpeskin这对开发者来说是不公平的.仅仅因为你"愿意支付他们"并没有像专业的妓女那样强迫他们为你工作.如果你无法弄清楚如何调试它,那么我不会指责除了你自己以外的任何人 - 你在互联网上找到的软件"按原样"提供,所以不要四处抨击抨击除了努力帮助之外别无其他. (5认同)
  • http://blueimp.github.com/jQuery-File-Upload/ - 这非常好用.至少我喜欢它,因为它不会在Ubuntu下滞后=) (5认同)
  • @sucitivel更详细一点:我愿意支付他接受,然后我们经历了麻烦记录我们看到的所有错误,然后他停止响应任何和所有电子邮件(只是礼貌的,请求状态更新和是否他仍对这项工作感兴趣).我认为没有人有义务为钱工作.对于其他可能想了解开发人员对自由职业者的可用性和/或兴趣的人来说,这仅仅是一个观察性数据点.这个项目是分叉的,所以我并不是唯一一个感觉开发人员对维护感兴趣的人. (3认同)

Mac*_*cha 13

我很遗憾地说,据我所知,纯PHP上传进度条,甚至是PHP/Javascript上传进度条都是不可能的,因为PHP的工作原理.您最好的选择是使用某种形式的Flash上​​传器.

AFAIK这是因为在填充所有超全局之前不会执行您的脚本,其中包括$ _FILES.当您的PHP脚本被调用时,该文件已完全上传.

编辑:这不再是真的.那是在2010年.

  • 为什么三个downvotes?这是真的,他们完全没有道理.我敢让任何人向我展示一个在本机PHP上运行的进度条,并且不需要额外的扩展/ Apache模块/ perl脚本/其他工作. (13认同)
  • 嗯,这是2012年,所有主流浏览器仍无法通过XMLHttpRequest在HTML5中上传文件. (10认同)
  • @Pekka웃这不是真的.如果您安装了APC(并且您应该),您可以在PHP中完全本地完成,也不需要javascript. (3认同)
  • @Pekka웃更不用说在PHP> = 5.4中使用会话信息上传了. (2认同)

Pow*_*ord 13

如果安装了APC,则它具有用于上载进度的回调挂钩.

Rasmus Lerdorf(PHP的创建者)有一个使用YUI 的示例(哦,这里是PHP源代码).

请参阅此处的文档.


小智 8

一个PHP-ish(5.2 +)&no-Flash方式对我很有用:

首先,请看这篇文章解释如何启动并运行"uploadprogress"扩展.

然后,在包含要从中上载文件的表单的页面中,创建以下iframe:

<iframe id="progress_iframe" src="" style="display:none;" scrolling="no" frameborder="0"></iframe>
Run Code Online (Sandbox Code Playgroud)

接下来,将此代码添加到"提交"按钮:

onclick="function set() { f=document.getElementById('progress_iframe'); f.style.display='block'; f.src='uploadprogress.php?id=<?=$upload_id?>';} setTimeout(set);"
Run Code Online (Sandbox Code Playgroud)

现在,当您单击"提交"以开始上载文件时,表单中的隐藏iframe将显示并显示uploadprogress.php的内容.$ upload_id必须与您在表单中使用隐藏字段"UPLOAD_IDENTIFIER"的值相同.

uploadprogress.php本身看起来像这样(修复并根据您的需要调整):

<html>
<head>
<META HTTP-EQUIV='REFRESH' CONTENT='1;URL=?id=<?=$_GET['id']?>'>
</head>
<body>
Upload progress:<br />
<?php
    if(!$_GET['id']) die;
    $info = uploadprogress_get_info($_GET['id']);
    $kbytes_total = round($info['bytes_total'] / 1024);
    $kbytes_uploaded = round($info['bytes_uploaded'] / 1024);
    echo $kbytes_uploaded.'/'.$kbytes_total.' KB';
?>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

请注意,每秒都会自我刷新.你可以在这里添加一些不错的视觉进度条(如2个嵌套的<div> s,用不同的颜色),如果你愿意的话.具有上传进度的iframe自然仅在上传进行时有效,并在表单提交并且浏览器重新加载到下一页后结束其可见生命.