2015-03-31 102 views
2

现在我正在使用事件流来回显从另一个脚本到用户的上传进度,但无论我如何尝试将表单数据进度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脚本:

我将不胜感激的任何解决方案如何解决问题,最好没有安装任何PHP库。

感谢

+0

说: “XAMPP” 是内部使用Apache?这就是'a'是...你需要指定你在两台机器上使用的apache和php的版本。 – 2015-03-31 14:53:45

+0

@MarcB我在我的电脑上使用php/5.3 apache/2.2.22(linux)在我的web服务器和php/5.5 apache/2.4.10(windows)上。我不确定为什么在我的PHP脚本中所做的更改仅适用于完成后或者是否由于任何系统差异而导致。 – Wip 2015-03-31 15:04:37

+0

可能与使用基于文件的会话一样简单,这意味着您的进度脚本无法执行,直到上传完成,因为上传脚本正在锁定会话。 – 2015-03-31 15:05:56

回答

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); 
你意识到
相关问题