php ci output,CI框架源码翻阅-Output.php

这篇博客详细解析了CI框架中的Output.php类,主要涉及输出数据的处理,包括设置和获取输出字符串、设置HTTP头部信息、内容类型、输出压缩等。此外,还介绍了缓存机制、性能分析器的启用和配置,以及如何处理服务器头信息。
摘要由CSDN通过智能技术生成

CI框架源码阅读---------Output.php

_zlib_oc // 如果配置项中开启了输出压缩功能则$this->_zlib_oc 的值为on$this->_zlib_oc = @ini_get('zlib.output_compression');// Get mime types for later// 获取mimetypeif (defined('ENVIRONMENT') AND file_exists(APPPATH.'config/'.ENVIRONMENT.'/mimes.php')){ include APPPATH.'config/'.ENVIRONMENT.'/mimes.php';}else{include APPPATH.'config/mimes.php';}// $mimes 是mimes.php中定义的一个数组$this->mime_types = $mimes;log_message('debug', "Output Class Initialized");}// --------------------------------/** * Get Output * 使用这个方法,你可以得到将要输出的数据,并把它保存起来 * Returns the current output string * 返回当前输出的字符串 * @accesspublic * @returnstring */function get_output(){return $this->final_output;}// --------------------------------/** * Set Output * * Sets the output string * 设置输出的字符串 * @accesspublic * @paramstring * @returnvoid */function set_output($output){$this->final_output = $output;return $this;}// --------------------------------/** * Append Output * 在最终输出字符串后,追加数据 * Appends data onto the output string * * @accesspublic * @paramstring * @returnvoid */function append_output($output){if ($this->final_output == ''){$this->final_output = $output;}else{$this->final_output .= $output;}return $this;}// --------------------------------/** * Set Header * 使用此方法,允许你设置将会被发送到浏览器的HTTP协议的标头,作用相当于php的标准函数: header()。 * Lets you set a server header which will be outputted with the final display. * 允许您设置一个服务器头用于最终的显示输出。 * Note: If a file is cached, headers will not be sent. We need to figure 计算 out * how to permit header data to be saved with the cache data... * * @accesspublic * @paramstring * @param bool * @returnvoid */function set_header($header, $replace = TRUE){// If zlib.output_compression is enabled it will compress the output,// but it will not modify the content-length header to compensate 补偿 for// the reduction减少 还原, causing the browser to hang waiting for more data.// We'll just skip content-length in those cases.if ($this->_zlib_oc && strncasecmp($header, 'content-length', 14) == 0){return;}$this->headers[] = array($header, $replace);return $this;}// --------------------------------/** * Set Content Type Header * 设置Content-Type * @accesspublic * @paramstringextension of the file we're outputting * @returnvoid */function set_content_type($mime_type){if (strpos($mime_type, '/') === FALSE){$extension = ltrim($mime_type, '.');// Is this extension supported?if (isset($this->mime_types[$extension])){$mime_type =& $this->mime_types[$extension];if (is_array($mime_type)){$mime_type = current($mime_type);}}}$header = 'Content-Type: '.$mime_type;$this->headers[] = array($header, TRUE);return $this;}// --------------------------------/** * Set HTTP Status Header * moved to Common procedural functions in 1.7.2 * 允许你手动设置服务器状态头(header) * @accesspublic * @paramintthe status code * @paramstring * @returnvoid */function set_status_header($code = 200, $text = ''){set_status_header($code, $text);return $this;}// --------------------------------/** * Enable/disable Profiler * 允许你开启或禁用分析器 * @accesspublic * @parambool * @returnvoid */function enable_profiler($val = TRUE){$this->enable_profiler = (is_bool($val)) ? $val : TRUE;return $this;}// --------------------------------/** * Set Profiler Sections * 设置$this->_profiler_sections * Allows override of default / config settings for Profiler section display * 允许你在评测器启用时,控制(开/关)其特定部分 * * @accesspublic * @paramarray * @returnvoid */function set_profiler_sections($sections){foreach ($sections as $section => $enable){$this->_profiler_sections[$section] = ($enable !== FALSE) ? TRUE : FALSE;}return $this;}// --------------------------------/** * Set Cache * 设置缓存以及缓存时间 * @accesspublic * @paraminteger 其中 $time 是你希望缓存更新的 分钟 数 * @returnvoid */function cache($time){$this->cache_expiration = ( ! is_numeric($time)) ? 0 : $time;return $this;}// --------------------------------/** * Display Output * 显示输出 * All "view" data is automatically put into this variable by the controller class: * * $this->final_output * * This function sends the finalized output data to the browser along * with any server headers and profile data. It also stops the * benchmark timer so the page rendering speed and memory usage can be shown. * * @accesspublic * @param string * @returnmixed */function _display($output = ''){// Note: We use globals because we can't use $CI =& get_instance()// since this function is sometimes called by the caching mechanism,// which happens before the CI super object is available.// 注意:我们使用global 是因为我们不能使用$CI =& get_instance() global $BM, $CFG;// Grab the super object if we can.// //当然如果可以拿到超级控制器,我们先拿过来。if (class_exists('CI_Controller')){$CI =& get_instance();}// --------------------------------// Set the output data// 设置输出数据if ($output == ''){$output =& $this->final_output;}// --------------------------------// Do we need to write a cache file? Only if the controller does not have its// own _output() method and we are not dealing with a cache file, which we// can determine by the existence of the $CI object above// 如果缓存时间>0 ,$CI 超级对象存在并且超级对象下面存在_output 方法// 调用_write_cache 方法,写一个缓存文件if ($this->cache_expiration > 0 && isset($CI) && ! method_exists($CI, '_output')){$this->_write_cache($output);}// --------------------------------// Parse out the elapsed time and memory usage,// then swap the pseudo-variables with the data// 计算代码执行时间和内存使用时间$elapsed = $BM->elapsed_time('total_execution_time_start', 'total_execution_time_end');// 如果$this->parse_exec_vars为true,将输出中的{elapsed_time},{memory_usage}// 替换为计算出的时间。if ($this->parse_exec_vars === TRUE){$memory = ( ! function_exists('memory_get_usage')) ? '0' : round(memory_get_usage()/1024/1024, 2).'MB';$output = str_replace('{elapsed_time}', $elapsed, $output);$output = str_replace('{memory_usage}', $memory, $output);}// --------------------------------// Is compression requested?压缩传输的处理。if ($CFG->item('compress_output') === TRUE && $this->_zlib_oc == FALSE){if (extension_loaded('zlib')){if (isset($_SERVER['HTTP_ACCEPT_ENCODING']) AND strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== FALSE){ob_start('ob_gzhandler');}}}// --------------------------------// Are there any server headers to send?// 有没有服务器头发送?if (count($this->headers) > 0){foreach ($this->headers as $header){@header($header[0], $header[1]);}}// --------------------------------// Does the $CI object exist?// If not we know we are dealing with a cache file so we'll// simply echo out the data and exit.// 如果没有$CI就证明当前是一个缓存的输出,我们只简单的发送数据并退出if ( ! isset($CI)){echo $output;log_message('debug', "Final output sent to browser");log_message('debug', "Total execution time: ".$elapsed);return TRUE;}// --------------------------------// Do we need to generate profile data?// If so, load the Profile class and run it.// 如果开启了性能分析我们就调用,// 会生成一些报告到页面尾部用于辅助我们调试。if ($this->enable_profiler == TRUE){$CI->load->library('profiler');if ( ! empty($this->_profiler_sections)){$CI->profiler->set_sections($this->_profiler_sections);}// If the output data contains closing

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值