【发布时间】:2015-09-08 20:56:44
【问题描述】:
我目前正在尝试使网页看起来更现代一些,但在向模式窗口添加一些相对简单的功能时遇到了一些麻烦。
在我的网页上,用户首先上传一个文件,然后在点击提交时,该文件由一个 shell 脚本处理(这可能需要几秒钟到几分钟,具体取决于文件大小)。
为了显示进程状态,我一直在做的是使用 php 执行以下代码:
$cmd = "script.bash -i $input_file";
$PID = shell_exec($cmd . " >> $log 2>&1 & echo $!");
while(is_process_running($PID)){
echo(" . ");
ob_flush(); flush();
sleep(3);
}
除了显示的一些其他信息(未显示)之外,这将简单地打印出一个“。”每隔几秒钟给用户一个进程正在运行的指示。完成后,会出现一个下载链接,以便检索处理后的数据。
我现在想做的是在模式窗口中加载这些信息。创建模态窗口(使用 boostrap 和 javascript)并向其添加下载功能没有问题,但是只有在通过 php 执行的 $cmd 完成后才能执行此操作。我想做的是执行$cmd,加载模态窗口,然后查询进程状态并在模态窗口中显示某种指示器,最后在进程完成时创建下载链接。我相信这需要通过 AJAX 来完成,但我对如何做到这一点有点困惑。这是我更详细的代码:
<?
if($theaction == "run_script" and !$error_msg){
$cmd = "script.bash -i $input_file";
$PID = shell_exec($cmd . " >> $log 2>&1 & echo $!");
while(is_process_running($PID)){ #ensure the process is compete before loading the html
echo("");
ob_flush(); flush();
sleep(3);
}
echo "
<script type=\"text/javascript\">
$(function() { $(\"#myModalProcess\").modal('show') })
</script>
<div class=\"modal fade\" id=\"myModalProcess\" tabinex=\"-1\" role=\"dialog\" aria-hidden=\"true\">
<div class=\"modal-dialog\">
<div class=\"modal-content\">
<div class=\"modal-header\">
<h4><b>Process ID: $PID</b></h4>
<hr>
<p>Other stuff here</p>
<a type=\"button\" class=\"btn btn-primary\" href='".$_SERVER['PHP_SELF']."?theaction=download&workDir=$workDir&out_folder=$out_folder'>Download Results</a>
</div>
</div>
</div>
</div>
";
}
?>
【问题讨论】:
-
is_process_running是什么? -
对不起,这只是一个返回进程状态的javascript函数。
-
不能用php调用js函数
标签: javascript php ajax twitter-bootstrap