PHP的任何方式;“回声、显示、打印”;中间的消息?

PHP的任何方式;“回声、显示、打印”;中间的消息?,php,while-loop,Php,While Loop,我需要强制我的PHP页面在循环中的每一轮之后显示消息。。不是在循环的末尾。。因为我在运行一个无限循环。 目标是在服务器上运行命令的页面中有一个脚本。。获取输出并将数据与IF语句中的数据进行比较,如果它进行检查,则显示消息。。如果不是。。它休眠三秒钟,然后再次运行循环。 问题是,当我从服务器上的命令行运行php文件时,它会执行它应该执行的操作。。每3秒钟显示一条消息(不按确认按钮)。。但当我在浏览器中运行它时,它不会显示任何内容(它等待循环结束!) 但我不确定下面的例子是否能达到目的 <?p

我需要强制我的PHP页面在循环中的每一轮之后显示消息。。不是在循环的末尾。。因为我在运行一个无限循环。 目标是在服务器上运行命令的页面中有一个脚本。。获取输出并将数据与IF语句中的数据进行比较,如果它进行检查,则显示消息。。如果不是。。它休眠三秒钟,然后再次运行循环。 问题是,当我从服务器上的命令行运行php文件时,它会执行它应该执行的操作。。每3秒钟显示一条消息(不按确认按钮)。。但当我在浏览器中运行它时,它不会显示任何内容(它等待循环结束!) 但我不确定下面的例子是否能达到目的

<?php
while (1==1) {
  $answer = shell_exec ("COMMAND'");
  list($src, $app, $cid, $non, $flag, $dur, $exten) = explode("!", $answer);

  if ($cid > 0) {
    echo "<script language='javascript'>
      var r=confirm('You have a call from $cid: Show Data?') 
      if (r==true)
      {
        OPEN A WEB PAGE INSIDE AN IFRAME
      }
    </script>";

    //header( 'refresh: 15; url=monit.php' );
    flush();
    sleep(10);
  }
  else {
    //header( 'refresh: 1; url=monit.php' );
    sleep(1);
  }
}
?>

请注意,我试图使用“header()”函数来重新加载页面,但我不想重新加载页面本身(这将在父页面内造成复杂性)


有什么建议吗?

关于刷新功能,有几点需要检查:

flush()可能无法覆盖web服务器的缓冲方案,并且对浏览器中的任何客户端缓冲都没有影响


一些服务器(尤其是Win32上的服务器)仍会缓冲脚本的输出,直到脚本终止,然后再将结果传输到浏览器


Apache的服务器模块(如mod_gzip)可能自己进行缓冲,这将导致flush()不会立即将数据发送到客户端

注释中还提到了一些需要检查的配置文件选项

If flush()函数不起作用。必须在php.ini中设置下一个选项,如:

output\u buffering=Off
;输出处理程序=
zlib.output\u compression=Off
;zlib.output\u处理器=


我还注意到有注释掉的行会导致页面刷新-您不需要刷新页面就可以看到新的输出,浏览器应该显示页面仍在加载,直到脚本完成。

对于刷新功能,有几点需要检查:

flush()可能无法覆盖web服务器的缓冲方案,并且对浏览器中的任何客户端缓冲都没有影响


一些服务器(尤其是Win32上的服务器)仍会缓冲脚本的输出,直到脚本终止,然后再将结果传输到浏览器


Apache的服务器模块(如mod_gzip)可能自己进行缓冲,这将导致flush()不会立即将数据发送到客户端

注释中还提到了一些需要检查的配置文件选项

If flush()函数不起作用。必须在php.ini中设置下一个选项,如:

output\u buffering=Off
;输出处理程序=
zlib.output\u compression=Off
;zlib.output\u处理器=


我还注意到有注释掉的行会导致页面刷新-您不需要刷新页面就可以看到新的输出,浏览器应该显示页面仍在加载,直到脚本完成。

如前所述,除非您完全控制服务器,否则这是不可能实现的,即使您这样做了,如果您想保持连接打开相当长的时间,它可能会超时,需要客户端继续

因此,使用AJAX可能是一个更好的主意,例如:

ping.php

$answer = shell_exec('COMMAND');
$r = array();
list($r['src'], $r['app'], $r['cid'], $r['non'], $r['flag'], $r['dur'], $r['exten']) = explode("!", $answer);
if($r['cid'] > 0)
  $r['success'] = true;
else
  $r['success'] = false;
echo json_encode($r);
公共HTML/PHP文件中的脚本

<script type="text/javascript">
  // If you're using jQuery...
  var ping = function() {
    $.ajax('ping.php', {
      dataType: 'json',
      success: function(data) {
        if(data.success && confirm('You have a call from ' + data.cid + ': show data>'))
          $('iframe').attr('src', 'new_page.php');
      }
    });
  };
  setInterval(ping, 3000);
</script>

//如果您正在使用jQuery。。。
var ping=函数(){
$.ajax('ping.php'{
数据类型:“json”,
成功:功能(数据){
if(data.success&&confirm('您有一个来自'+data.cid+':show data>'的调用))
$('iframe').attr('src','new_page.php');
}
});
};
设定间隔(ping,3000);

如前所述,除非您完全控制服务器,否则这是不可能实现的,即使您这样做了,如果您想保持连接打开相当长的时间,它可能会超时,需要客户端继续

因此,使用AJAX可能是一个更好的主意,例如:

ping.php

$answer = shell_exec('COMMAND');
$r = array();
list($r['src'], $r['app'], $r['cid'], $r['non'], $r['flag'], $r['dur'], $r['exten']) = explode("!", $answer);
if($r['cid'] > 0)
  $r['success'] = true;
else
  $r['success'] = false;
echo json_encode($r);
公共HTML/PHP文件中的脚本

<script type="text/javascript">
  // If you're using jQuery...
  var ping = function() {
    $.ajax('ping.php', {
      dataType: 'json',
      success: function(data) {
        if(data.success && confirm('You have a call from ' + data.cid + ': show data>'))
          $('iframe').attr('src', 'new_page.php');
      }
    });
  };
  setInterval(ping, 3000);
</script>

//如果您正在使用jQuery。。。
var ping=函数(){
$.ajax('ping.php'{
数据类型:“json”,
成功:功能(数据){
if(data.success&&confirm('您有来自“+data.cid+”:show data>'的呼叫)
$('iframe').attr('src','new_page.php');
}
});
};
设定间隔(ping,3000);

将其放入您的htaccess(gzip轮次):

要回显消息并刷新输出缓冲区,请在循环中执行以下操作:

echo $msg;
ob_flush();
flush();

将其放入您的htaccess(gzip轮次):

要回显消息并刷新输出缓冲区,请在循环中执行以下操作:

echo $msg;
ob_flush();
flush();

请缩进你的代码。我几乎看不懂。至于你的问题,没有。你必须用AJAX来做这件事,因为PHP不能像这样打印文本(浏览器通常会超时)。如果你还没有关闭
zlib
/
gzip
。你在任何时候使用过ob_start()吗?请缩进你的代码。我几乎看不懂。至于你的问题,没有。你必须用AJAX来做这件事,因为PHP不能像这样打印文本(浏览器通常会超时)。如果你还没有关闭
zlib
/
gzip
。你在任何时候都使用过ob_start()?