【问题标题】:PHP get function return instantlyPHP get 函数立即返回
【发布时间】:2014-01-16 10:15:11
【问题描述】:

想知道是否有办法让 PHP 脚本返回并立即在浏览器上(通过网页)打印各种函数的结果,而无需等待下一个完成。

示例 PHP 代码:

<? php
for ($i = 0; $i < 100; $i++) {
    echo $i. ":". my_function(); / / takes a long time to run
}
?>

发布:

0: value ... (the function of the cycle $i = 1 is still running)
1: value ... (the function of the cycle $i = 2 is still running)

等等……

【问题讨论】:

  • 没有。 PHP 必须先计算所有内容,然后才能呈现 HTML。没有办法在 PHP 中动态创建类似的东西。
  • @YUNOWORK 不正确。 PHP 不需要等待任何东西,它只是输出值。 Web 服务器 通常是缓冲响应的服务器。
  • OP:HTTP 是同步的,任何输出只有在脚本执行后才会发送到客户端。它根本不像 CLI 模式
  • @deceze 嗯好的,不知道。害羞得退缩。 :c
  • 也许您可能会在每个函数中将返回的答案写入文件。然后看看这个stackoverflow.com/questions/4078352/…。您可能会在网页上跟踪该文件的位置。这是我唯一能想到的。更多链接code.google.com/p/php-tailstackoverflow.com/questions/1102229/…

标签: php


【解决方案1】:

您可以使用 flush() 函数尝试将数据刷新回浏览器。

来自 php.net 的描述:

刷新 PHP 的写入缓冲区以及 PHP 正在使用的任何后端 (CGI、Web 服务器等)。这试图推动所有的电流输出 浏览器的方法有一些注意事项。

flush() 可能无法覆盖您网站的缓冲方案 服务器,它对任何客户端缓冲没有影响 浏览器。它也不会影响 PHP 的用户空间输出缓冲 机制。这意味着您必须同时调用 ob_flush() 和 如果你正在使用 flush() 来刷新 ob 输出缓冲区。

下面的示例代码,在 chrome 31.0.1650.57 (linux)、Safari (6.0.4) (osx) 上测试:

注意:是否显示刷新的输出取决于浏览器(通常取决于响应中的数据量)。例如 Safari (6.0.4) 在将数据输出到浏览器之前需要 512 字节的数据。您可以通过将 512 个字符填充到输出的开头来解决此问题。

<?php
header( 'Content-type: text/html; charset=utf-8' );
echo str_repeat(" ",512); //pad the buffer with data (in case browser needs it)
while (true){
    //write go to the browser every 2 seconds.. forever
    echo "go...<br/>";
    ob_flush(); 
    flush(); 
    sleep(2);
}
?>

更多信息在这里http://us1.php.net/manual/en/function.flush.php

【讨论】:

  • 如果您能提供一个建设性的理由来说明为什么这被否决,我将不胜感激。
猜你喜欢
  • 1970-01-01
  • 2014-04-08
  • 2010-10-14
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
  • 1970-01-01
  • 2012-07-13
  • 1970-01-01
相关资源
最近更新 更多