Hello StackOverflow社区,
我正在努力实现" Live Logging"在我的一个Web应用程序中,通过打开与我的php后端的异步连接,该后端应该通过echo / print语句不断发送日志数据。
我已经尝试了这个例子" Streaming with Ajax"从这个页面https://www.sitepoint.com/php-streaming-output-buffering-explained/,但它不会工作。
HTML + JS
<html>
<head>
<title>Ajax Streaming Test</title>
</head>
<body>
<center><a href="#" id="test">Test Ajax Streaming</a></center>
<script type="text/javascript">
document.getElementById('test').onclick = function() {
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();
};
</script>
</body>
</html>
PHP文件(刚刚按原样显示在网站上)
<?php for ($i = 1; $i <= 10; $i++): ?>
<?php sleep(1); ?>
Count = <?php echo "$i\n"; ?>
<?php ob_flush(); flush(); ?>
<?php endfor; ?>
我已停用 output_buffering 并启用了 ob_implicit_flush 。
预期的结果是在您按下&#34;测试Ajax Streaming&#34;按钮,弹出一个警告显示&#34; Count = 1&#34;,然后显示另一个警告&#34; Count = 1,Count = 2&#34;等...
在我的情况下,我只收到一个警告,显示for循环的完整内容。
由于这篇文章是从2014年开始的,我认为从那时起PHP和Apache发生了很大的变化,所以流式传输这样的PHP仍然可能吗?
我使用的是以下版本
PHP版本:PHP 7.1.12
Apache版本:Apache / 2.4.29(Fedora)