Javascript 使用AJAX实现PHP和Bash结果

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

我正在创建一种系统,在我的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); -> 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 -> |
                                           |                     |
                                            _____________________