2010-12-21 10 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 ... ?>に含まれていないすべてのテキストをすべて出力し、すべてのエコーはすべて出力に出力します。これはエラーに送信されます...出力:httpサーバ(クライアントに送信する)、コンソールなど

この出力は出力バッファに保存されるので、後でそれをどうするかを決めることができます。

db接続には影響しません。それは、PHPによって作成されたテキスト(主に)を扱います。

2

最初..あなたに感謝し、コードの任意の行でのhttp-ヘッダ(ヘッダ機能)を置くための便利です。例えばセッションクッキー。 ob_startを使用しないと、既にいくつかのデータを送信している場合、http-headerをレスポンスに追加できません。エコーまたはプリント機能付き

0

この特定のコードob_startでは役に立たないようです。出力バッファリングの利点は、コードに続くか、存在しないことです。 `一般的に、consult PHP manual about ob_start

5

PHPプログラマーの中には、ob_start()をコードの先頭に置いている人もいますが、私はここで何が起こっているのか確信しています。

ページの出力途中でエラーが発生した場合は、バッファをクリアしてエラーページを出力できます。また、HTTPヘッダーを送信しようとすると、「送信できなかったヘッダー、出力が既に開始されました」というエラーを受け取ることもありません。

これを行うには正当な理由がいくつかありますが、私は一貫した順序でコードを構造化したくない平凡なプログラマーであるという兆候として取り上げます。つまり、エラーまたはヘッダーはの前に送信し、はページのレンダリングを開始します。この習慣をコピーしないでください。

(*これは、スクリプトの終了時に出力バッファリングがオンのままになっていると、バッファがユーザに送信されるため、一致することを心配する必要はありません終了ステートメント)

関連する問題