2010-12-21 36 views
4
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()会有什么好处。它会缓冲什么输出数据?ob_start()在这里的作用是什么

谢谢你..

回答

7

通常情况下,php会发送不包含在<?php ... ?>中的所有文本,所有回声都会打印到输出。哪个发送到err ...输出:http服务器(将它发送到客户端),控制台等。

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

它不影响数据库连接。它处理由php生成的文本(大部分)。

2

首先缓冲是把HTTP报头(header函数)在任何一行代码有用。例如 - 会话cookie。如果你已经发送了一些数据,例如没有ob_start,你将不能添加任何http头来响应。带回声或打印功能

5

一些PHP程序员把ob_start()放在他们所有代码的第一行*,我很肯定这是在这里发生的。

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

这样做有几个正当的理由,但我会把它看作是一个标志,他们是平庸的程序员,他们不想以一致的顺序来构建他们的代码 - 也就是说他们应该在那里工作在之前发送错误或头文件,他们开始渲染页面。不要复制这个习惯。

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