2010-12-21 90 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標頭時,您永遠不會收到「無法發送標頭,輸出已經啓動」的錯誤。

這樣做有幾個正當的理由,但我會把它看作是一個標誌,他們是平庸的程序員,他們不想以一致的順序來構建他們的代碼 - 也就是說他們應該在那裏工作在之前發送錯誤或頭文件,他們開始渲染頁面。不要複製這個習慣。

(*這是一個容易陷入的習慣,因爲如果輸出緩衝在達到腳本結束時仍然打開,緩衝區會發送給用戶,所以他們不需要擔心匹配結束語)