有人可以保存这两个文件并运行它们,然后告诉我为什么我得到错误“
ob_flush()[ref.outcontrol]:无法刷新缓冲区。没有要刷新的缓冲区”。我尝试了四处搜寻,并说必须使用ob_start();。但是,当我这样做时,它不会逐行打印出来,而是在完成后从FOR循环返回整个对象。我对PHP有点陌生,所以我不确定其他地方。
test_process.php
// This script will write numbers from 1 to 100 into file
// And sends continuously info to user
$fp = fopen( '/tmp/output.txt', 'w') or die('Failed to open');
set_time_limit( 120);
ignore_user_abort(true);
for( $i = 0; $i < 100; $i++){
echo "<script type=\"text/javascript\">parent.document.getElementById( 'foo').innerHTML += 'Line $i<br />';</script>";
echo str_repeat( ' ', 2048);
flush();
ob_flush();
sleep(1);
fwrite( $fp, "$i\n");
}
fclose( $fp);
main.html
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript" charset="utf-8"></script>
<style type="text/css" media="screen">
.msg{ background:#aaa;padding:.2em; border-bottom:1px #000 solid}
.new{ background-color:#3B9957;}
.error{ background-color:#992E36;}
</style>
</head>
<body>
<iframe id="loadarea" width="1024px" height="768px"></iframe><br />
<script>
function helper() {
document.getElementById('loadarea').src = 'test_process.php';
}
function kill() {
document.getElementById('loadarea').src = '';
}
</script>
<input type="button" onclick="helper()" value="Start">
<input type="button" onclick="kill()" value="Stop">
<div id="foo"></div>
</body>
</html>
我想你混淆了ob_flush()
用flush()
。虽然ob_start()
并ob_flush()
处理捕获所有输出的PHP内部输出缓冲区,但它flush()
是正常的函数,STDOUT
像其他编程语言一样进行刷新。
例:
<?php
ob_start();
echo "Foobar\nFoobar\nFoobar\n";
// Nothing printed yet
ob_flush(); // Now it is printed.
echo "Foobar\n"; // Printed directly, because contains a line ending.
echo "Foobar"; // Not printed, because normally buffers are flushed on line endings
flush(); // Printed.
编辑:
您的输出未打印,因为您的Web服务器可能会缓冲内容。尝试关闭压缩和输出缓冲:
@apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 0);
@ini_set('implicit_flush', 1);
还请记住,Safari和Internet Explorer具有内部1K缓冲区。因此,您需要添加1 KB的填充数据(如空格)以使其呈现。
编辑2: 您的实现已损坏。您想使用ajax轮询数据。在客户端使用jQuery:
<div id="counter">0%</div>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js">
<script type="text/javascript">
function doPoll(){
$.post('script-that-returns-stuff.php', function(data) {
$("#counter").html(data);
setTimeout(doPoll,5000);
});
}
doPoll();
</script>
然后在script-that-returns-stuff.php
:
<?php
$file = explode("\n", file_get_contents("/tmp/output.txt"));
$last_line = $file[count($file)-1];
echo $last_line."%";
问题内容: 什么之间的区别,并和我为什么一定要同时调用? 该参考说: 此函数将发送输出缓冲区的内容(如果有)。 该参考说: 刷新PHP的写缓冲区以及PHP使用的任何后端PHP(CGI,Web服务器等)。 但是,它继续说: [它]可能无法覆盖Web服务器的缓冲方案… 因此,在我看来,我可以一直使用所有时间。但是,这样做会得到奇怪的结果。有人可以简单地解释一下这是怎么回事吗? 问题答案: 发送应用程序
本文向大家介绍刷新PHP缓冲区为你的站点加速,包括了刷新PHP缓冲区为你的站点加速的使用技巧和注意事项,需要的朋友参考一下 在当前 PHP 版本的默认配置下,“输出缓冲(Output Buffering)”是被打开的。旧版本则不是这样,在旧版本的 PHP 中,字符串在每次被输出的时候(通过 echo 或 print 函数),都会触发一次发送到客户端浏览器的动作。 “输出缓冲”的引入,使得这一过程更
问题内容: 在log4j中,当使用具有BufferedIO = true和BufferSize = xxx属性(即启用了缓冲)的FileAppender时,我希望能够在正常关闭过程中刷新日志。有关如何执行此操作的任何想法? 问题答案:
问题内容: 我正在优化一个大型查询,并希望在比较之前和之后从同一基准运行它。 我知道mysql查询缓存,但与我无关,因为无论如何都不会缓存2个查询。 正在缓冲的是缓冲池中的innodb页面。有没有一种方法可以清除整个缓冲池,以便可以从同一起点比较两个查询? 虽然在运行每个查询后重新启动mysql服务器无疑会工作,但我想尽可能避免这种情况 问题答案: 警告:以下内容仅适用于MySQL 5.5和MyS
我在张量流中使用keras创建了一个自定义模型。我使用的版本是tensorflow nightly 1.13.1。我使用官方工具构建了tensorfflow lite模型(方法tf.lite.TFLiteConverter.from_keras_model_file)。 创建模型后,我查看了输入形状,似乎没有什么不好。 tensorflow lite模型中的输入和输出形状为: 您可以注意到输入形状
本文向大家介绍PHP缓冲区用法总结,包括了PHP缓冲区用法总结的使用技巧和注意事项,需要的朋友参考一下 本文实例总结了PHP缓冲区用法。分享给大家供大家参考,具体如下: 我们先来看一段代码。 按照php手册里的说法: 该函数将当前为止程序的所有输出发送到用户的浏览器。 上面的这段代码,应该隔一秒钟输出一次$i。但是实际中却不一定是这样。有可能是等了10秒钟后,所有的输出同时呈现出来。 好,我们来改