在我的Web应用程序中,我有一个过程大约需要13个小时才能完成,并且整个过程都在生成日志。我想在Web应用程序中的选项卡上显示日志。我已经按顺序使用了JQuery,php,bash脚本,php和javascript来显示值。以下是我的代码的最小示例:
HTML
<!DOCTYPE html>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
</head>
<body>
<div id="testPage" name="testPage">
</div>
<button onclick="getData()" value="submit"></button>
</body>
<script type="text/javascript">
function getData() {
setInterval(function() {
$.post('initiateTrain.php')
$.post('getTrainLogs.php', function(output) {
document.getElementById('testPage').innerHTML = output;
})
},1000)
}
</script>
</html>
initiateTrain.php
<?php
exec("sh /var/www/html/test.sh >> /var/www/html/test.log");
?>
test.sh
#!/bin/bash
while true; do
for i in 1 2 3 4 5
do
echo "Welcome $i times"
sleep 1
done
if [ $? -eq 0 ]
then
echo 'Success'
break
fi
break
done
getTrainLogs.php 读取测试日志的最后一行
<?php
$line = '';
$f = fopen('test.log', 'r');
$cursor = -1;
fseek($f, $cursor, SEEK_END);
$char = fgetc($f);
while ($char === "\n" || $char === "\r") {
fseek($f, $cursor--, SEEK_END);
$char = fgetc($f);
}
while ($char !== false && $char !== "\n" && $char !== "\r") {
$line = $char . $line;
fseek($f, $cursor--, SEEK_END);
$char = fgetc($f);
}
echo $line;
?>
我面临两个问题...
答案 0 :(得分:0)
针对您的问题的解决方案如下:
1.要将输出放置在与单行相反的单独行上,您需要使用换行符,即\n
,或者您需要使用<br/>
标签(或将每个括起来<div>
或其他块标记中的一行),具体取决于您选择如何生成和显示数据。否则,任何机器甚至人都将无法知道哪些文本属于新行。
2.要停止间隔,您需要使用JavaScript clearInterval()
函数。您还需要在setInterval()
可以访问的变量中捕获clearInterval()
调用的返回值。例如,如果您进行var myInterval = setInterval(...);
,则将呼叫clearInterval(myInterval);
。