标签: output-buffering

在php中使用ob_start()有什么用?

ob_start()用于output buffering使头被缓冲,而不是发送到浏览器?我在这里有道理吗?如果没有那么我们为什么要使用ob_start()

php output-buffering

280
推荐指数
8
解决办法
27万
查看次数

什么是输出缓冲?

什么是输出缓冲以及为什么在PHP中使用它?

php output-buffering

198
推荐指数
4
解决办法
15万
查看次数

python的file.flush()到底在做什么?

我在文件对象的Python 文档中找到了这个:

flush()不一定将文件的数据写入磁盘.使用flush()后跟os.fsync()来确保此行为.

所以我的问题是:Python到底在flush做什么?我认为它强制将数据写入磁盘,但现在我发现它没有.为什么?

python io fsync output-buffering

124
推荐指数
3
解决办法
9万
查看次数

使用PHPUnit测试PHP头文件

我正在尝试使用PHPunit来测试输出一些自定义标头的类.

问题是在我的机器上这个:

<?php

class HeadersTest extends PHPUnit_Framework_TestCase {

    public function testHeaders()
    {
        ob_start();

        header('Location: foo');
        $headers_list = headers_list();
        header_remove();

        ob_clean();

        $this->assertContains('Location: foo', $headers_list);
    }
}
Run Code Online (Sandbox Code Playgroud)

甚至这个:

<?php

class HeadersTest extends PHPUnit_Framework_TestCase {

    public function testHeaders()
    {
        ob_start();

        header('Location: foo');
        header_remove();

        ob_clean();
    }
}
Run Code Online (Sandbox Code Playgroud)

返回此错误:

name@host [~/test]# phpunit --verbose HeadersTest.php 
PHPUnit 3.6.10 by Sebastian Bergmann.

E

Time: 0 seconds, Memory: 2.25Mb

There was 1 error:

1) HeadersTest::testHeaders
Cannot modify header information - headers already sent by (output started at /usr/local/lib/php/PHPUnit/Util/Printer.php:173)

/test/HeadersTest.php:9 …
Run Code Online (Sandbox Code Playgroud)

php phpunit unit-testing output-buffering

87
推荐指数
4
解决办法
3万
查看次数

PHP缓冲区ob_flush()与flush()

ob_flush()flush()两个人之间有什么区别?

ob_flush()参考说:

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

flush()参考说:

刷新PHP的写缓冲区以及PHP正在使用的任何后端(CGI,Web服务器等).

但是,它继续说:

[它]可能无法覆盖您的Web服务器的缓冲方案......

所以,在我看来,我可以只使用ob_flush()所有的时间.但是,当我这样做时,我得到了奇怪的结果.有人可以用简单的语言解释这里发生了什么吗?

php flush output-buffering

76
推荐指数
4
解决办法
6万
查看次数

如何清除PHP中以前回显的项目

在PHP中,有没有办法清除/删除所有以前回显或打印的项目?

例如:

<?php

echo 'a';
print 'b';

// some statement that removes all printed/echoed items

echo 'c';

// the final output should be equal to 'c', not 'abc'

?>
Run Code Online (Sandbox Code Playgroud)

我的脚本使用include函数.包含的文件不应该回应任何东西.为了防止有人(ex = hacker)尝试,我需要一种方法来删除.

php output-buffering echo output

45
推荐指数
1
解决办法
8万
查看次数

当流管道用于缓冲时,节点回送服务器降级10倍

在节点v8.1.4和v6.11.1上

我开始使用以下echo服务器实现,我将其称为pipe.jspipe.

const http = require('http');

const handler = (req, res) => req.pipe(res);
http.createServer(handler).listen(3001);
Run Code Online (Sandbox Code Playgroud)

我用wrk和下面的lua脚本(为简洁起见缩短了)对它进行了基准测试,它将发送一个小体作为有效载荷.

wrk.method = "POST"
wrk.body   = string.rep("a", 10)
Run Code Online (Sandbox Code Playgroud)

每秒2k请求和44ms的平均延迟,性能不是很好.

所以我编写了另一个使用中间缓冲区的实现,直到请求完成,然后将这些缓冲区写出来.我将其称为 buffer.jsbuffer.

const http = require('http');

const handler = (req, res) => {
  let buffs = [];
  req.on('data', (chunk) => {
    buffs.push(chunk);
  });
  req.on('end', () => {
    res.write(Buffer.concat(buffs));
    res.end();
  });
};
http.createServer(handler).listen(3001);
Run Code Online (Sandbox Code Playgroud)

性能发生了巨大变化,buffer.js每秒处理20k次请求,平均延迟为4ms.

在视觉上,下图描绘了超过5次运行和各种延迟百分位数的服务请求的平均数量(p50是中位数).

缓冲管对比

因此,缓冲区在所有类别中都要好一个数量级.我的问题是为什么?

接下来是我的调查笔记,希望它们至少具有教育意义.

反应行为

这两个实现都是精心设计的,因此它们会给出与返回的完全相同的响应curl -D - --raw.如果给出一个10 d's的主体,两者都将返回完全相同的响应(当然,修改时间): …

javascript http stream output-buffering node.js

38
推荐指数
1
解决办法
782
查看次数

ob_get_clean和ob_get_flush之间的区别

它们似乎都做同样的事情:将输出缓冲区内容返回给你并在之后删除它.

我应该使用哪一个?

php output-buffering

36
推荐指数
4
解决办法
2万
查看次数

ob_clean和ob_flush之间的区别?

ob_clean()和之间有什么区别ob_flush()

还有什么区别ob_end_clean()ob_end_flush()?我知道ob_get_clean()并且ob_get_flush()都获得内容和结束输出缓冲.

php output-buffering

35
推荐指数
1
解决办法
3万
查看次数

PHP:抑制函数内的输出?

抑制函数可能产生的任何输出的最简单方法是什么?说我有这个:

function testFunc() {
    echo 'Testing';
    return true;
}
Run Code Online (Sandbox Code Playgroud)

我想调用testFunc()并获得其返回值,而不会在页面中显示"Testing".假设这是在其他代码的情况下输出其他的东西,是有这样的好方法?也许搞乱输出缓冲区?

php function output-buffering

32
推荐指数
2
解决办法
2万
查看次数