我不熟悉php。我尝试了stackoverflow的不同答案,但没有成功解决问题。
我收到了一个带有提交按钮的HTML表单。提交后我调用一个php脚本,然后调用一个可执行文件,该文件对来自html的提交数据运行一些算法。最后,我通过php回应分析结果。
<?php
$ex=shell_exec("...");
if($ex == "Run Successfully\n"){
echo"<html>
<meta http-equiv= refresh content='0.1;URL=--.txt'>
</html>";
}
?>
直到这个工作正常,但我的算法需要30-40秒才能运行,所有那段时间我的原始html页面仍然在屏幕上,看起来没有任何事情发生在那里。所以我创建了一个带有进度条动画的新html页面。现在我想在可执行文件运行时显示进度条,当结果可用时,我想像以前一样用结果页面替换进度条页面。
我尝试了echo file_get_contents("waiting.html");
header ("location: waiting.html");
但是没有一个像我计划的那样有效。它们一直在可执行完成工作之后才出现,而不是在此之前。 如果有人可以帮我提出一些建议,我将不胜感激。 提前谢谢。
答案 0 :(得分:1)
这是jQuery和AJAX可以很好地工作的地方。你可以做的是从加载动画开始,并使用jQuery用带有ajax的shell_exec调用php文件。一旦ajax是.done(),那么你可以用结果替换文本。如果您需要我澄清,请告诉我。
但是,如果您不想使用AJAX,PHP会逐行运行。因此,您需要将进度条放在shell_exec之前。这意味着您将无法使用标头位置,因为标头已经发送。
编辑(AJAX示例): 这将是如何实现这一目标的一个简单示例。 创建两个php文件: 的 progress.php 强>
Load jQuery
<script type="text/javascript">
$(document).ready(function() {
$.ajax({
url:'algorithm.php',
type: 'post',
cache: false,
success: function(data) {
//Replace with how you want to format the page
}
});
});
</script>
Loading Bar
<强> algorithm.php 强>
<?php
$ex=shell_exec("...");
if($ex == "Run Successfully\n"){
die('{"status":"success"}');
}
?>
现在你不必使用json作为输出。你也可以有html输出。让我知道我是否应该澄清任何事情。