ob_start()在这里的作用是什么

时间:2010-12-21 08:22:00

标签: php

session_start();
ob_start();
$hasDB = false;
$server = 'localhost';
$user = 'user';
$pass = 'pass';
$db = 'acl_test';
$link = mysql_connect($server,$user,$pass);
if (!is_resource($link)) {   
    $hasDB = false;
    die("Could not connect to the MySQL server at localhost.");
} else {   
    $hasDB = true;
    mysql_select_db($db);
}

a)ob_start()究竟做了什么。我明白它会打开输出缓冲。参考上面的代码,如果我在尝试与数据库建立连接时使用ob_start(),将会有什么好处。它将缓冲哪些输出数据?

谢谢..

4 个答案:

答案 0 :(得分:7)

通常,php会将<?php ... ?>中未包含的所有文本,所有回声,所有打印件发送到输出。哪个发送到错误...输出:http服务器(将其发送到客户端),控制台等。

在ob_start之后,此输出保存在输出缓冲区中,因此您可以稍后决定如何处理它。

它不会影响数据库连接。它处理由php生成的文本(主要是)。

答案 1 :(得分:5)

一些PHP程序员将ob_start()放在他们所有代码的第一行*上,我很确定这就是这里发生的事情。

这意味着如果他们中途输出页面并确定存在错误,他们可以清除缓冲区并输出错误页面。这也意味着在尝试发送HTTP标头时,您永远不会收到“无法发送标头,输出已启动”错误。

有一些合理的理由要做到这一点,但我认为这是一个标志,他们是平庸的程序员,他们不想以一致的顺序构建他们的代码 - 也就是说如果有的话,他们应该努力在开始呈现页面之前发送的错误或标题。不要复制这个习惯。

(*这使得这容易陷入的习惯是,如果在到达脚本结束时仍然打开输出缓冲,则缓冲区被发送给用户,因此他们不需要担心匹配的结束语句)

答案 2 :(得分:2)

首先,缓冲对于将http-headers(标题函数)放在任何代码行都很有用。例如 - 会话cookie。没有ob_start,如果您已经发送了一些数据,则无法将任何http-header添加到响应中,例如使用回音或打印功能

答案 3 :(得分:0)

在这个特定的代码ob_start似乎没用。输出缓冲的好处是在以下代码中或不存在。 “一般来说,consult PHP manual about ob_start