CI フレームワークのソース コードの読み取り----------Output.php_PHP チュートリアル
defined
php
フレーム
ソースコード
読む
[php]
/**
* コードイグナイター
*
* PHP 5.1.6 以降用のオープンソース アプリケーション開発フレームワーク
*
* @package CodeIgniter
* @author ExpressionEngine 開発チーム
* @copyright Copyright (c) 2008 - 2011, EllisLab, Inc.
* @license http://codeigniter.com/user_guide/license.html
* @link http://codeigniter.com
* @since バージョン 1.0
* @filesource
*/
// ----------------------------------------------- ------------------------
/**
* 出力クラス
*
* 最終出力をブラウザに送信する責任があります
* 最終出力をブラウザに送信する責任があります
* @パッケージCodeIgniter
* @subpackage ライブラリ
* @category 出力
* @author ExpressionEngine 開発チーム
* @link http://codeigniter.com/user_guide/libraries/output.html
*/
クラス CI_Output {
/**
* 現在の出力文字列
* 現在の出力文字列
*
* @var 文字列
* @access 保護されています
*/
protected $final_output;
/**
* キャッシュの有効期限
* キャッシュの有効期限
* @var int
* @access 保護されています
*/
protected $cache_expiration = 0;
/**
* サーバーヘッダーのリスト
* サーバーヘッダーリスト
* @var 配列
* @access 保護されています
*/
protected $headers = array();
/**
* MIME タイプのリスト
*
* @var 配列
* @access protected
*/
protected $mime_types = array();
/**
* プロファイラーが有効かどうかを決定します
* アナライザーを有効にするかどうか
* @var本
* @access 保護されています
*/
protected $enable_profiler = FALSE;
/**
* 出力圧縮が有効かどうかを決定します
* 出力圧縮を有効にするかどうか
* @var bool
* @access 保護されています
*/
protected $_zlib_oc = FALSE;
/**
* プロファイラーセクションのリスト
* アナライザーリスト
*
* @var 配列
* @access 保護されています
*/
protected $_profiler_sections = array();
/**
* {elapsed_time} や {memory_usage} などの変数を解析するかどうか
* 否か解析变量{elapsed_time}と{memory_usage}
* 注意文档说这里有错详见http://codeigniter.org.cn/user_guide/libraries/output.html
*最下方
* @var bool
* @access 保護されています
*/
保護された $parse_exec_vars = TRUE
/**
* コンストラクター
*
*/
関数__construct()
{
置 // 設定項目 zlib.output_compression の値を返し、それを $this- & _zlib_oc に渡します ;
// 設定項目で出力圧縮機能がオンになっている場合、$this->_zlib_oc の値はオンになります // 後で使用するために MIME タイプを取得します
// MIME タイプを取得します
if (define('ENVIRONMENT') AND file_exists(APPPATH.'config/'.ENVIRONMENT.'/mimes.php'))
APPPATH.'config/mimes.php' をインクルードします
}
// $mimes は mimes.php で定義された配列です
$this->mime_types = $mimes;
}
// ----------------------------------------------- --- --------------------------
/**
* 出力を取得する
* この方法を使用すると、出力するデータを取得して保存することができます
* 現在の出力文字列を返します
* 現在の出力文字列を返します
* @アクセス公開
* @戻り文字列
*/
関数get_output()
{
️戻る-- $this を返す->FINAL_OUTPUT;
}
// ----------------------------------------------- --- --------------------------
/**
* 出力を設定します
*
* 出力文字列を設定します
* 出力文字列を設定します
* @アクセス公開
* @パラメータ文字列
* @return void
*/
関数 set_output($output)
{
$this->final_output = $output;
}
// ----------------------------------------------- --- --------------------------
/**
* 出力を追加
* 最終出力文字列の後にデータを追加します
* 出力文字列にデータを追加します
*
* @アクセス公開
* @パラメータ文字列
* @return void
*/
関数append_output($output)
{
if ($this->final_output == '')
}
その他
$this->final_output .= $output;
}
$this を返します。
}
// ----------------------------------------------- ---------------------
/**
* ヘッダーを設定します
* このメソッドを使用すると、ブラウザに送信する HTTP プロトコルのヘッダーを設定できます。これは、PHP の標準関数 header() に相当します。
* 最終的な表示で出力されるサーバーヘッダーを設定できます。
* 最終的な表示出力のサーバーヘッダーを設定できます。 の补偿を補うためにコンテンツ長ヘッダーは変更されません
// 削減减少还原により、追加のデータを待機している間にブラウザがハングします。 * HTTP ステータス ヘッダーを設定します
* 1.7.2 の共通手続き関数に移動
* 允许你手動设置服务器状態态头(ヘッダー)
* @access public
* @param int ステータスコード
* @param string
* @return void
*/
function set_status_header($code = 200, $text = '')
{
set_status_header($code, $text);
$this を返します。
}
// ----------------------------------------------- ---------------------
/**
* プロファイラーを有効/無効にする
* アナライザーを有効または無効にすることができます
* @アクセス公開
* @param bool
* @return void
*/
関数enable_profiler($val = TRUE)
{
$this->enable_profiler = (is_bool($val)) ? $val : TRUE;
$this を返します。
}
// ----------------------------------------------- ---------------------
/**
* プロファイラーセクションを設定する
* $this->_profiler_sections を設定します
* プロファイラー セクション表示のデフォルト/構成設定の上書きを許可します
* 有効になっている場合、レビューアーの特定の部分を制御 (オン/オフ) できます
*
* @アクセス公開
* @param配列
* @return void
*/
関数 set_profiler_sections($sections)
{
foreach ($sections as $section => $enable)
{
$this->_profiler_sections[$section] = ($enable !== FALSE) ?真/偽;
}
$this を返します。
}
// ----------------------------------------------- ---------------------
/**
* キャッシュを設定する
* キャッシュとキャッシュ時間を設定します
* @アクセス公開
* @param integer $time はキャッシュを更新する分数です
* @return void
*/
関数キャッシュ($time)
{
$this->cache_expiration = ( ! is_numeric($time)) ? 0 : $時間;
$this を返します。
}
// ----------------------------------------------- ---------------------
/**
* ディスプレイ出力
* 显示输出
* すべての「ビュー」データは、コントローラー クラスによって自動的にこの変数に入れられます:
*
* $this->final_output
*
* この関数は、最終的な出力データをブラウザに送信します
* サーバーヘッダーとプロファイルデータを含みます。
も停止します
* ページのレンダリング速度とメモリ使用量を表示できるベンチマーク タイマー。
*
* @access public
* @パラメータ文字列
* @return 混合
*/
関数 _display($output = '')
{
// 注: $CI =& get_instance() を使用できないため、グローバルを使用します
// この関数はキャッシュメカニズムによって呼び出される場合があるため、
// これは CI スーパー オブジェクトが利用可能になる前に発生します
$CI =& get_instance();
} if ($output == '')
}
--------------------------------------
// コントローラーに
がない場合にのみ、キャッシュ ファイルを書き込む必要がありますか?
// 独自の _output() メソッドであり、キャッシュ ファイルを扱っていません。
// 上記の $CI オブジェクトの存在によって判断できます
// キャッシュ時間 > 0 の場合、$ CI スーパー オブジェクトが存在し、そのスーパー オブジェクトの下に _output メソッドが存在します
// _write_cache メソッドを呼び出してキャッシュ ファイルを書き込みます
if ($this->cache_expiration > 0 && isset($CI) && ! Method_exists($CI, '_output'))
}
--------------------------------------
// 経過時間とメモリ使用量を解析します。
// 次に、疑似変数をデータと交換します
// コードの実行時間とメモリ使用時間を計算します
$elapsed = $BM->elapsed_time('total_execution_time_start', 'total_execution_time_end');
$memory = ( ! function_exists('memory_get_usage')) '0' :round(memory_get_usage()/1024/1024, 2)
;
$output = str_replace('{elapsed_time}', $elapsed, $output);
$output = str_replace('{memory_usage}', $memory, $output);
}
--------------------------------------
// 圧縮送信の処理が要求されていますか?
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');
}
}
}
// ------------------------------------------- ---------------------
// 送信するサーバー ヘッダーはありますか?
// 有没服务器头発行?
if (count($this->headers) > 0)
{
foreach ($this->headers as $header)
{
@header($header[0], $header[1]);
}
}
// ------------------------------------------- ---------------------
// $CI オブジェクトは存在しますか?
// そうでない場合は、キャッシュ ファイルを扱っていることがわかっているため、
// データをエコーアウトして終了します。
// 如果無し$CI就证明当前是一存存出,我们只简单的送信データ据并退出
if ( ! isset($CI))
{
echo $output;
log_message('debug', "ブラウザに送信された最終出力");
log_message('debug', "合計実行時間: ".$elapsed);
TRUE を返します。
}
// ------------------------------------------- ---------------------
// プロファイル データを生成する必要がありますか?
// その場合は、Profile クラスをロードして実行します。
// 如果开启了性能分析我们就调用、
// 会議は、私を助けるためにいくつかの報告を面尾部に生成します。
if ($this->enable_profiler == TRUE)
{
$CI->load->library('profiler');
if ( ! emptyempty($this->_profiler_sections))
{
$CI->profiler->set_sections($this->_profiler_sections);
}
// 出力データに終了