现在我使用事件流来回应从另一个脚本到用户的上传进度,但无论我如何尝试将表单数据进展php文件中的变量传递给我的事件流文件,它不起作用。
问题是,我在运行的php脚本中为文件上传所做的所有更改只有在我的服务器上完全执行脚本后才会显示,而它在我的本地工作正常机。
我尝试过写入我的web目录,tmp目录中的文件并使用mysql数据库,但没有一个能够工作。
这是我的上传进度php脚本与sql解决方案大致相似的内容:
$progress = 0;
foreach ($files as $file) {
sql("UPDATE `tmp` SET `progress`=? WHERE `ID`=?", $progress, $id);
imagejpeg($image, "images/gallery/$filename.jpg", 100);
$progress++;
}
我的事件流php脚本:
echo "data: ".sql("SELECT `progress` FROM `tmp` WHERE `ID`=?", $id)."\n\n";
如果没有安装任何php库,我会很感激如何解决这个问题。
由于
答案 0 :(得分:1)
我已经通过上传脚本向用户刷新进度并通过定期检查xhr.responseText来处理输出来解决我的问题。
PHP(刷新换行+进度)
foreach ($files as $drop => $file) {
echo "\n$progress";
flush();
// file progressing
}
JavaScript(在最后一次换行后获得进展)
setInterval(function() {
if (page.xhr.readyState == 3 && page.xhr.status == 200) {
var response = page.xhr.responseText;
$('#progress').stop().animate({width: parseFloat(response.substr(response.lastIndexOf("\n")+1))+'%'}, 480);
}
}, 1000);