用PHP上传进度条
有人知道如何在php中获取上传进度条吗?我正在尝试为相册上传程序编写代码。我想在上传照片时显示进度条用PHP上传进度条,php,upload,progress-bar,Php,Upload,Progress Bar,有人知道如何在php中获取上传进度条吗?我正在尝试为相册上传程序编写代码。我想在上传照片时显示进度条 我对php相当陌生,所以我不知道它的一切 很抱歉,就我所知,由于PHP的工作方式,纯PHP上传进度条,甚至PHP/Javascript上传进度条都不可能实现。你最好的选择是使用某种形式的Flash上传程序 这是因为在填充所有超全局变量(包括$\u文件)之前不会执行脚本。在调用PHP脚本时,文件已完全上载 编辑:这不再是事实。那是在2010年。您需要使用Javascript创建进度条。通过简单的谷
我对php相当陌生,所以我不知道它的一切 很抱歉,就我所知,由于PHP的工作方式,纯PHP上传进度条,甚至PHP/Javascript上传进度条都不可能实现。你最好的选择是使用某种形式的Flash上传程序 这是因为在填充所有超全局变量(包括$\u文件)之前不会执行脚本。在调用PHP脚本时,文件已完全上载
编辑:这不再是事实。那是在2010年。您需要使用Javascript创建进度条。通过简单的谷歌搜索,我找到了这篇文章: 是使用DojoJavaScript框架的另一个选项
编辑:假设您上载了大量图像(如相册),并将其发布到PHP脚本中,您可以使用javascript从帖子中读取结果,并根据上载的图像数/图像总数更新进度栏。这样做的副作用是,只有在每个帖子完成后才进行更新。查看一些关于如何使用JS发布的信息。可以创建一个php/ajax进度条。(在pear中签出Html_Ajax库)。 但是,这需要在php中安装自定义模块 其他方法需要使用iframe,php通过iframe查看文件的上传量。但是,此隐藏的iframe可能会被某些浏览器插件阻止,因为隐藏的iframe通常用于向用户计算机发送恶意数据 如果您无法控制服务器,最好使用某种形式的flash进度条。如果您已经安装,它有一个用于上传进度的回调挂钩 Rasmus Lerdorf(PHP的创建者)使用YUI对这一点有一定的了解(哦,下面是示例)
请参阅。Gears和HTML5在
HttpRequest
对象中有一个进度事件,用于通过AJAX提交文件上载
其他人已经回答的其他选项包括:
从技术上讲,有第四种选择,类似于YouTube上传,通过Gears或HTML5,您可以使用blob将文件分割成小块,然后分别上传每个块。完成每个区块后,您可以更新进度状态。另一个上载程序full JS:
- 免费(BSD许可证)
- 国际化
- 跨浏览器兼容
- 您可以选择是否安装APC(欠终止进度条与确定进度条)
- 可自定义的外观,因为它使用dojo模板机制。您可以根据css在te模板中添加类/ID
<iframe id="progress_iframe" src="" style="display:none;" scrolling="no" frameborder="0"></iframe>
接下来,将此代码添加到“提交”按钮:
onclick=“function set(){f=document.getElementById('progress_iframe');f.style.display='block';f.src='uploadprogress.php?id=';}setTimeout(set);”
现在,您的表单中有一个隐藏的iframe,当您单击“提交”开始上传文件时,它将显示uploadprogress.php的内容$upload_id必须与用作表单中隐藏字段“upload_IDENTIFIER”值的id相同
uploadprogress.php本身如下所示(根据您的需要进行修复和调整):
请注意,这是每秒钟进行一次自我刷新。如果你喜欢的话,你可以在这里添加一些漂亮的视觉进度条(比如两个不同颜色的嵌套进度条)。具有上载进度的iframe自然仅在上载过程中工作,一旦提交表单并将浏览器重新加载到下一页,它的可见生命就结束了。HTML5引入了一个框架,允许您监控文件上传的进度,但对于较旧的浏览器,有一个专门用于监控文件上传并提供相关信息的框架。此外,它还具有大量回调功能,因此可以跨所有浏览器运行上传进度条的实现非常简单,不需要任何额外的PHP扩展、JavaScript或Flash。但是您需要PHP5.4和更新的 您必须通过在
php.ini
中将指令设置为On
来启用上传进度信息的收集
然后在任何其他文件输入之前向HTML上载表单添加隐藏输入。该隐藏输入的HTML属性name
应与php.ini
中指令的值相同(最后加上)。值
属性由您决定,它将用作会话密钥的一部分
HTML表单可能如下所示:
<form action="upload.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="<?php echo ini_get('session.upload_progress.prefix').ini_get('session.upload_progress.name'); ?>" value="myupload" />
<input type="file" name="file1" />
<input type="submit" />
</form>
输出将类似于以下内容:
$_SESSION["upload_progress_myupload"] = array(
"start_time" => 1234567890, // The request time
"content_length" => 57343257, // POST content length
"bytes_processed" => 54321, // Amount of bytes received and processed
"done" => false, // true when the POST handler has finished, successfully or not
"files" => array(
0 => array(
"field_name" => "file1", // Name of the <input /> field
// The following 3 elements equals those in $_FILES
"name" => "filename.ext",
"tmp_name" => "/tmp/phpxxxxxx",
"error" => 0,
"done" => false, // True when the POST handler has finished handling this file
"start_time" => 1234567890, // When this file has started to be processed
"bytes_processed" => 54321, // Number of bytes received and processed for this file
)
)
);
$\u会话[“上载进度\u我的上载”]=array(
“开始时间”=>1234567890,//请求时间
“内容长度”=>57343257,//发布内容长度
“bytes_processed”=>54321,//接收和处理的字节数
“完成”=>错误//
<form action="upload.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="<?php echo ini_get('session.upload_progress.prefix').ini_get('session.upload_progress.name'); ?>" value="myupload" />
<input type="file" name="file1" />
<input type="submit" />
</form>
var_dump($_SESSION[
ini_get('session.upload_progress.prefix')
.ini_get('session.upload_progress.name')
.'_myupload'
]);
$_SESSION["upload_progress_myupload"] = array(
"start_time" => 1234567890, // The request time
"content_length" => 57343257, // POST content length
"bytes_processed" => 54321, // Amount of bytes received and processed
"done" => false, // true when the POST handler has finished, successfully or not
"files" => array(
0 => array(
"field_name" => "file1", // Name of the <input /> field
// The following 3 elements equals those in $_FILES
"name" => "filename.ext",
"tmp_name" => "/tmp/phpxxxxxx",
"error" => 0,
"done" => false, // True when the POST handler has finished handling this file
"start_time" => 1234567890, // When this file has started to be processed
"bytes_processed" => 54321, // Number of bytes received and processed for this file
)
)
);