萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> php輸出控制的學習筆記

php輸出控制的學習筆記

   1、簡介

  當PHP腳本有輸出時,輸出控制函數可以用這些來控制輸出。這在多種不同情況中非常有用,尤其是用來在腳本開始輸出 數據後,發送http頭信息到浏覽器。輸出控制函數不影響由 header()或setcookie()發送的文件頭信息,僅影響像echo這樣的函數和PHP代碼塊間的數據。

  2、作用

  1)、如官方介紹說,為了避免在輸出文件頭信息如header()和setcookie()之前出現輸出而發生的錯誤。可以使用輸出緩存函數。如下代碼

 代碼如下   <?php 
    ob_start();      //打開緩存控制函數
    echo 'hello';
    header('Location: http://www.111cn.net/');
?>

  2)、將輸出內容放入緩存區,如需進行其他操作,如將輸出寫入緩存文件,可將緩沖區內容寫入緩存文件,然後輸出。

 代碼如下    ob_start();
    echo 'hello';
    $file = ob_get_contents();
    ob_end_clean();
    write_cache($file);    //將緩沖區內容寫入緩存函數,實現細節省略

  3)、獲取某些無返回值內置函數的輸出內容,如phpinnfo();

 代碼如下   <?php
ob_start();
phpinfo();
$file = ob_get_contents();   //phpinfo()輸出內容
ob_end_clean();
 
?>

  4)、在使用框架的時候,我們會發現框架中會將輸出緩沖然後進行變量替換。最後輸出。

  除了這些內容,我們還可以利用輸出緩存進行錯誤處理,具體看代碼。我們可以將錯誤信息獲取,以更加友好的方式輸出。

 代碼如下   <?php
 
function display_error()
{
 if($errors = error_get_last())
 {
  return var_export($errors , TRUE);
 }
 return FALSE;
}
 
$dis_error = 'display_error';
 
//$a = 3;
 
ob_start( $dis_error );
 
echo $a;

  附:ob_start()官方解釋:

  bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )

  此函數將打開輸出緩沖。當輸出緩沖激活後,腳本將不會輸出內容(除http標頭外),相反需要輸出的內容被存儲在內部緩沖區中。

  內部緩沖區的內容可以用 ob_get_contents() 函數復制到一個字符串變量中。 想要輸出存儲在內部緩沖區中的內容,可以使用 ob_end_flush() 函數。另外, 使用 ob_end_clean() 函數會靜默丟棄掉緩沖區的內容。

  output_callback

  可選參數 output_callback 函數可以被指定。 此函數把一個字符串當作參數並返回一個字符串。 當輸出緩沖區被( ob_flush(), ob_clean() 或者相似的函數)沖刷(送出)或者被清洗的時候;或者在請求結束之際輸出緩沖區內容被沖刷到浏覽器的時候該函數將會被調用。 當調用 output_callback 時,它將收到輸出緩沖區的內容作為參數 並預期返回一個新的輸出緩沖區作為結果,這個新返回的輸出緩沖區內容將被送到浏覽器。 如果這個 output_callback 不是一個可以調用的函數,此函數 會返回 FALSE 。

  如果回調函數有兩個參數,第二個參數會由一個位域補充,該位域由 PHP_OUTPUT_HANDLER_START, PHP_OUTPUT_HANDLER_CONT 和 PHP_OUTPUT_HANDLER_END 組成。

  如果 output_callback 返回 FALSE ,其原來的輸入 內容被直接送到浏覽器。

  這個參數 output_callback 可以通過直接給一個 NULL 值而避開。

  ob_end_clean(), ob_end_flush(), ob_clean(), ob_flush() and ob_start() 不能從一個回調函數中調用。 如果從回調函數中調用了它們,產生的行為是不明確的。 如果想要刪除緩沖區的內容,從回調函數中返回一個”" (空字符串)。 更不能從一個回調函數中使用像print_r($expression, true) 或highlight_file($filename, true) 一樣的輸出緩沖函數。

copyright © 萬盛學電腦網 all rights reserved