Javascript 使用AJAX实现PHP和Bash结果
我正在创建一种系统,在我的linux机器上通过web界面复制文件 我有一个bash脚本、php页面和html页面,它向php页面发出AJAX请求 下面是这个系统中数据流的一个例子Javascript 使用AJAX实现PHP和Bash结果,javascript,php,ajax,bash,Javascript,Php,Ajax,Bash,我正在创建一种系统,在我的linux机器上通过web界面复制文件 我有一个bash脚本、php页面和html页面,它向php页面发出AJAX请求 下面是这个系统中数据流的一个例子 HTML Page Form With AJAX -> PHP Script -> exec('./copy.sh '.$_REQUEST['folder'].' '.$_REQUEST['target'].'', $Output, $Result); echo end($Output); -> HT
HTML Page Form With AJAX -> PHP Script -> exec('./copy.sh '.$_REQUEST['folder'].' '.$_REQUEST['target'].'', $Output, $Result); echo end($Output); -> HTML Page Status div
以下是Exec函数的PHP部分:
exec('./copy.sh '.$_REQUEST['folder'].' '.$_REQUEST['target'].'', $Output, $Result);
echo end($Output);
这是我的复印件
问题是,我想将progressbar添加到这个操作中,它可以使用以下代码:
$('#CopyFiles').click(function(){
overlaystart();
var url = "/copy.php";
$.ajax({
type: "POST",
url: url,
data: {folder: Folder, target: TargetFolder},
success: function(data)
{
}
});
setTimeout(function(){
closestart();
window.location = '/';
}, 9000);
$('.progressbarstart').animate(
{width:'100%'},
{
duration:8000,
step: function(now, fx) {
if(fx.prop == 'width') {
$(this).html(Math.round(now * 100) / 100 + '%');
}
}
}
);
});
但问题来了,AJAX工作得很好,php脚本工作没有问题,但问题是,即使文件复制速度超过9秒progressbar动画时间,覆盖仍然打开,但有时文件复制时间会超过9秒
所以我想问的是:
是否可以使用php+ajax(非强制性)以某种方式监控复制进度
是否有可能使AJAX关闭窗口,即使它的4s离开去制作progressbar的动画,但接收完成了!bash的响应
如果没有上述可能,我还能做什么?
这里是我试图实现的一个小描述:
AJAX to PHP -> Execute Bash File -> Wait For Response -> Is Completed?
^ |
| -> Yes -> Close Modal Window Overlay
| |
| -> No -> |
| |
_____________________
我们使用下一个模式。在服务器上进行长时间操作时,但不是复制步骤等待响应上的文件,我们会定期启动ajax请求以观察流程执行情况。主进程取消执行时间限制。进度条和命令的数据由用户取消,我们可能试图通过主进程和ajax观察者之间的用户会话交换数据。我们遇到了阻塞会话数据的问题,我们不知道会话写入关闭;并通过db进行数据交换,但这是一个错误的决定,应该重构为session_write_close的session。您能发布php代码的exec部分吗?您可以使用popen读取脚本输出,然后发回信息?检查是否有想法。@Seçkin我想我已经发布了我的bash文件和exec文件以及第一个代码标签。popen很好,但如果我用ajax再次查询我的php文件,它将启动新的复制过程
AJAX to PHP -> Execute Bash File -> Wait For Response -> Is Completed?
^ |
| -> Yes -> Close Modal Window Overlay
| |
| -> No -> |
| |
_____________________