【问题标题】:PHP waits until a loop completesPHP 等待循环完成
【发布时间】:2012-09-30 15:37:14
【问题描述】:

我正在尝试在 PHP 中运行 10 次的 while 循环中打印 UDP 消息。问题是它一直等到循环完成,然后将消息打印 10 次,但我想在循环的每次迭代中打印它,而不是在循环完成时打印。这是我的代码。

<?php
  $socket = socket_create(AF_INET,SOCK_DGRAM,SOL_UDP);
  socket_bind($socket,$ip_address,$port);

  $i = 0;
  while($i < 10)
  {
    $i++;
    $FROM = '';
    $PORT = 0;

    socket_recvfrom($socket,$buffer,1024,0,$from,$PORT);
    echo "Receiving $buffer from IP $FROM and Port $PORT", PHP_EOL);
    flush();
    sleep(1);
   }
?>

【问题讨论】:

  • 是命令行脚本还是从浏览器调用?
  • 我从浏览器调用它

标签: php sockets udp


【解决方案1】:

在调用 flush() 之后,调用 ob_flush() 刷新输出缓冲区。

此函数将发送输出缓冲区的内容(如果有)

如果从浏览器访问,可能需要在网页顶部添加header( 'Content-type: text/html; charset=utf-8' );

脚本开头的 ob_start() 也会打开输出缓冲。

【讨论】:

  • 值得一提的是 php.net 上关于浏览器和 ob_flush 的帖子php.net/manual/en/function.ob-flush.php#109699
  • 当您从浏览器调用它时,将以下内容添加到您的 PHP 脚本 header( 'Content-type: text/html; charset=utf-8' );
  • 另外,请在脚本的开头尝试 ob_start()。其中之一应该工作。 :)
猜你喜欢
  • 2017-05-03
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-19
  • 2021-07-14
  • 2015-06-24
  • 2012-09-30
相关资源
最近更新 更多