PHP echo after every iteration in foreach loop

时间:2018-03-22 23:25:41

标签: php loops foreach echo

I'm trying to echo after every iteration of a foreach loop in PHP. The echos aren't rendering until they are all done. I've tried the suggestions from various posts but none are working. Some of my code is:

echo $epTitle . "<br>";
echo "<div>" . '<img src="' . $imgSrc . '" height="70" width="70">';
echo "<button onclick='grabVid(" . '"' . $pageUrl . '"' ..")'>Grab</button>";

I've tried the following:

flush();

.

flush();
ob_flush();

.

while (ob_get_level() > 0)
ob_end_flush();

.

@ini_set('zlib.output_compression', 0);
@ini_set('implicit_flush', 1);
@ob_end_clean();

and other suggestions from: http://php.net/manual/en/function.flush.php and Echo 'string' while every long loop iteration (flush() not working)

Any suggestions? Thanks.

2 个答案:

答案 0 :(得分:1)

如果您正在使用XHR(AJAX)并想要传输响应,则需要使用onprogress定期检查它。在收到回复时,onreadystatechange事件不会触发,因为readyState始终为loading,并且在请求完成之前不会更改。

这是一篇关于这个主题的好文章:

PHP Streaming and Output Buffering explained

它包含XHR部分的示例JavaScript:

xhr = new XMLHttpRequest();
xhr.open("GET", "response.php", true);
xhr.onprogress = function(e) {
  alert(e.currentTarget.responseText);
}
xhr.onreadystatechange = function() {
  if (xhr.readyState == 4) {
    console.log("Complete = " + xhr.responseText);
  }
}
xhr.send();

(我不知道该示例是否有任何理由在e.currentTarget事件处理程序中使用xhr而不是onprogress - 我只是按原样复制了示例。)< / p>

如果您计划执行此循环超过30秒,您的PHP脚本可能会被杀死。您可以extend the default time limit但如果您的网站有很多用户,您希望请求尽可能短,以获得最佳的服务器可用性。

这意味着重写循环,以便每次迭代都是单个HTTP请求。

答案 1 :(得分:0)

在回声后立即使用 ob_flush() 对我有用。