ob_start()是否用于输出缓冲,以便头被缓冲而不发送到浏览器?我说的有道理吗?如果不是,那么为什么我们要使用ob_start()?
当前回答
不,你错了,但方向是合适的;)
output - buffering缓冲脚本的输出。这就是(简而言之)回声或打印后的一切。头部的事情是,他们只能被发送,如果他们还没有被发送。但是HTTP表示,头信息是传输的第一步。因此,如果你第一次(在请求中)输出某些内容,则发送头信息,并且不能设置其他头信息。
其他回答
这里公认的答案描述了ob_start()做什么-而不是为什么使用它(这是被问到的问题)。
如别处所述,ob_start()创建一个缓冲区,输出写入其中。
但是没有人提到在PHP中可以堆叠多个缓冲区。看到ob_get_level()。
至于为什么....
Sending HTML to the browser in larger chunks gives a performance benefit from a reduced network overhead. Passing the data out of PHP in larger chunks gives a performance and capacity benefit by reducing the number of context switches required Passing larger chunks of data to mod_gzip/mod_deflate gives a performance benefit in that the compression can be more efficient. buffering the output means that you can still manipulate the HTTP headers later in the code explicitly flushing the buffer after outputting the [head]....[/head] can allow the browser to begin marshaling other resources for the page before HTML stream completes. Capturing the output in a buffer means that it can redirected to other functions such as email, or copied to a file as a cached representation of the content
这个函数不仅仅用于头文件。你可以用它做很多有趣的事情。例子:你可以把你的页面分成几个部分,像这样使用:
$someTemplate->selectSection('header');
echo 'This is the header.';
$someTemplate->selectSection('content');
echo 'This is some content.';
您可以捕获此处生成的输出,并将其添加到布局中的两个完全不同的位置。
你搞反了。Ob_start不缓冲头文件,它缓冲内容。使用ob_start允许您将内容保存在服务器端缓冲区中,直到准备好显示它为止。
这是常用的,这样页面就可以在他们已经“发送”了一些内容之后发送标题(例如,在渲染页面的中途决定重定向)。
不,你错了,但方向是合适的;)
output - buffering缓冲脚本的输出。这就是(简而言之)回声或打印后的一切。头部的事情是,他们只能被发送,如果他们还没有被发送。但是HTTP表示,头信息是传输的第一步。因此,如果你第一次(在请求中)输出某些内容,则发送头信息,并且不能设置其他头信息。
我喜欢:
ob_start();
echo("Hello there!");
$output = ob_get_clean(); //Get current buffer contents and delete current output buffer
推荐文章
- PHP中接口的意义是什么?
- 致命错误:未找到类“SoapClient”
- 我目前使用的是哪个版本的CodeIgniter ?
- 合并两个PHP对象的最佳方法是什么?
- 如何使HTTP请求在PHP和不等待响应
- 发送附件与PHP邮件()?
- 如何获得当前的路线在Symfony 2?
- 用PHP删除字符串的前4个字符
- mysql_connect():[2002]没有这样的文件或目录(试图通过unix:///tmp/mysql.sock连接)在
- 一个函数的多个返回值
- 在PHP中使用foreach循环时查找数组的最后一个元素
- 检查数组是否为空
- PHP DOMDocument loadHTML没有正确编码UTF-8
- PHP在个位数数前加上前导零
- PHPMailer字符编码问题