Php Tail-f通过javascript/jquery实现实时日志

Php Tail-f通过javascript/jquery实现实时日志,php,javascript,jquery,ajax,Php,Javascript,Jquery,Ajax,我试图得到一个真正的尾巴f型的观众 (我让它半工作,但它不是真正的缓冲它)它重写的尾巴-20每2秒,并没有真正的缓冲它,使其滚动(需要建立一些最终保存文件,但这是稍后),如果我尝试一个尾巴-f的命令将始终执行,而不是停止 我需要考虑某种类型的OBFLU* *(我试着用我正在处理的ping工具,在经过几天的研究之后没有运气)在PHP.ini中设置缓冲= OFF **/P> 这是LOGTAIL.JS function getLog(timer) { var url = "logtail.ph

我试图得到一个真正的尾巴f型的观众

(我让它半工作,但它不是真正的缓冲它)它重写的尾巴-20每2秒,并没有真正的缓冲它,使其滚动(需要建立一些最终保存文件,但这是稍后),如果我尝试一个尾巴-f的命令将始终执行,而不是停止

我需要考虑某种类型的OBFLU* *(我试着用我正在处理的ping工具,在经过几天的研究之后没有运气)在PHP.ini中设置缓冲= OFF **/P>


这是LOGTAIL.JS

function getLog(timer) {
  var url = "logtail.php";
  request1.open("GET", url, true);
  request1.onreadystatechange = updatePage;
  request1.send(null);
  startTail(timer);
}

function startTail(timer) {
  if (timer == "stop") {
    stopTail();
  } else {
    t= setTimeout("getLog()",1000);
  }
}

function stopTail() {
  clearTimeout(t);
  var pause = "The log viewer has been paused. To begin viewing again, click the Start Viewer button.\r\n\r\n";
  logDiv = document.getElementById("log");
  var newNode=document.createTextNode(pause);
  logDiv.replaceChild(newNode,logDiv.childNodes[0]);
}

function updatePage() {
  if (request1.readyState == 4) {
    if (request1.status == 200) {
      var currentLogValue = request1.responseText.split("\n");
      eval(currentLogValue);
      logDiv = document.getElementById("log");
      logDiv.scrollTop = logDiv.scrollHeight;
      var logLine = ' ';
      for (i=0; i < currentLogValue.length - 1; i++) {
        logLine += currentLogValue[i] + "<br/>\n";
      }
      logDiv.innerHTML=logLine;
      //} else
      //alert("Error! Request status is " + request1.status);
    }
  }
}
函数getLog(计时器){
var url=“logtail.php”;
请求1.打开(“获取”,url,true);
request1.onreadystatechange=updatePage;
请求1.发送(空);
startTail(计时器);
}
功能启动时钟(计时器){
如果(计时器=“停止”){
stopTail();
}否则{
t=setTimeout(“getLog()”,1000);
}
}
函数stopTail(){
清除超时(t);
var pause=“日志查看器已暂停。若要再次开始查看,请单击“开始查看器”按钮。\r\n\r\n”;
logDiv=document.getElementById(“日志”);
var newNode=document.createTextNode(暂停);
logDiv.replaceChild(newNode,logDiv.childNodes[0]);
}
函数updatePage(){
if(request1.readyState==4){
if(request1.status==200){
var currentLogValue=request1.responseText.split(“\n”);
eval(currentLogValue);
logDiv=document.getElementById(“日志”);
logDiv.scrollTop=logDiv.scrollHeight;
var logLine='';
对于(i=0;i\n”;
}
logDiv.innerHTML=logLine;
//}否则
//警报(“错误!请求状态为“+request1.status”);
}
}
}

您可以采取稍微不同的方法,使用Comet将消息从
tail
推送到浏览器。这里有一个关于PHP/Comet的好答案:

function getLog(timer) {
  var url = "logtail.php";
  request1.open("GET", url, true);
  request1.onreadystatechange = updatePage;
  request1.send(null);
  startTail(timer);
}

function startTail(timer) {
  if (timer == "stop") {
    stopTail();
  } else {
    t= setTimeout("getLog()",1000);
  }
}

function stopTail() {
  clearTimeout(t);
  var pause = "The log viewer has been paused. To begin viewing again, click the Start Viewer button.\r\n\r\n";
  logDiv = document.getElementById("log");
  var newNode=document.createTextNode(pause);
  logDiv.replaceChild(newNode,logDiv.childNodes[0]);
}

function updatePage() {
  if (request1.readyState == 4) {
    if (request1.status == 200) {
      var currentLogValue = request1.responseText.split("\n");
      eval(currentLogValue);
      logDiv = document.getElementById("log");
      logDiv.scrollTop = logDiv.scrollHeight;
      var logLine = ' ';
      for (i=0; i < currentLogValue.length - 1; i++) {
        logLine += currentLogValue[i] + "<br/>\n";
      }
      logDiv.innerHTML=logLine;
      //} else
      //alert("Error! Request status is " + request1.status);
    }
  }
}