使用PHP Echo从文件中的innerHTML中使用Javascript打印行

时间:2018-12-27 04:43:56

标签: javascript php

在我的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;
?>

我面临两个问题...

  1. 日志显示在一行中,而不是后续行中。
  2. 从日志中收到成功消息后,不知道如何停止设置的时间间隔

1 个答案:

答案 0 :(得分:0)

针对您的问题的解决方案如下:
 1.要将输出放置在与单行相反的单独行上,您需要使用换行符,即\n,或者您需要使用<br/>标签(或将每个括起来<div>或其他块标记中的一行),具体取决于您选择如何生成和显示数据。否则,任何机器甚至人都将无法知道哪些文本属于新行。
 2.要停止间隔,您需要使用JavaScript clearInterval()函数。您还需要在setInterval()可以访问的变量中捕获clearInterval()调用的返回值。例如,如果您进行var myInterval = setInterval(...);,则将呼叫clearInterval(myInterval);