【发布时间】:2014-10-15 07:44:40
【问题描述】:
我正在创建一种系统来通过我的 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);
这是我的 copy.sh
#!/bin/bash
InitialDir="$(cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd )"
Folder=$1
TargetDir=$2
cd "${InitialDir}"
rsync -a ${Folder} ${TargetDir} && echo "Complete!"
问题是,我想在这个操作中添加进度条,它适用于这段代码:
$('#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 秒(进度条动画时间),覆盖仍然打开,但有时文件会复制时间超过 9 秒。
所以我要问的是:
- 是否可以通过 php + ajax 以某种方式监控复制进度(非强制性)
- 是否可以让 AJAX 关闭窗口,即使它还剩 4 秒以动画进度条,但收到“已完成!”来自 bash 的回应
- 如果以上都不可行,我还能做什么?
附:以下是我试图实现的目标的简短描述:
AJAX to PHP -> Execute Bash File -> Wait For Response -> Is Completed?
^ |
| -> Yes -> Close Modal Window Overlay
| |
| -> No -> |
| |
_____________________
【问题讨论】:
-
你能发布你的php代码的exec部分吗?您可以使用
popen()并阅读您的脚本输出,然后发回信息?检查this answer 的想法。 -
@Seçkin 我想我已经发布了我的 bash 文件和 exec 文件(第一个代码标签)。 popen 很好,但是如果我再次查询我的 php 文件(使用 ajax),它将开始新的复制过程
标签: javascript php ajax bash