php缓冲 output_buffering的使用详解

   /*

  * Buffer the output

  *

  * We buffer the output for two reasons:

  * 1. Speed. You get a significant speed boost.

  * 2. So that the final rendered template can be

  * post-processed by the output class. Why do we

  * need post processing? For one thing, in order to

  * show the elapsed page load time. Unless we

  * can intercept the content right before it's sent to

  * the browser and then stop the timer it won't be accurate.

  */

  ob_start();

  // If the PHP installation does not support short tags we'll

  // do a little string replacement, changing the short tags

  // to standard PHP echo statements.

  if ((bool) @ini_get('short_open_tag') === FALSE AND config_item('rewrite_short_tags') == TRUE)

  {

  //替换短标记<?=***>

  echo eval('?>'.preg_replace("/;*s*?>/", "; ?>", str_replace('<?=', '<?php echo ', file_get_contents($_ci_path))));

  }

  else

  {

  include($_ci_path); // include() vs include_once() allows for multiple views with the same name

  }

  //记录调试信息

  log_message('debug', 'File loaded: '.$_ci_path);

  // Return the file data if requested

  if ($_ci_return === TRUE)

  {

  $buffer = ob_get_contents();

  @ob_end_clean();

  return $buffer;

  }

  /*

  * Flush the buffer... or buff the flusher?

  *

  * In order to permit views to be nested within

  * other views, we need to flush the content back out whenever

  * we are beyond the first level of output buffering so that

  * it can be seen and included properly by the first included

  * template and any subsequent ones. Oy!

  *

  */

  if (ob_get_level() > $this->_ci_ob_level + 1)

  {

  ob_end_flush();

  }

  else

  {

  //将模板内容添加到输出流中

  $_ci_CI->output->append_output(ob_get_contents());

  //清除buffer

  @ob_end_clean();

  }

您可能感兴趣的文章:

相关文章