ホームページ バックエンド開発 PHPチュートリアル CI フレームワークのソース コードの読み取り----------Output.php_PHP チュートリアル

CI フレームワークのソース コードの読み取り----------Output.php_PHP チュートリアル

Jul 14, 2016 am 10:09 AM
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 の値はオンになります
$this->_zlib_oc = @ini_get('zlib.output_compression');
// 後で使用するために MIME タイプを取得します
// MIME タイプを取得します
if (define('ENVIRONMENT') AND file_exists(APPPATH.'config/'.ENVIRONMENT.'/mimes.php'))
APPPATH.'config/'.ENVIRONMENT.'/mimes.php' をインクルードします
}
その他
APPPATH.'config/mimes.php' をインクルードします
}
// $mimes は mimes.php で定義された配列です
$this->mime_types = $mimes;
Log_message('debug', "出力クラスが初期化されました");
}
// ----------------------------------------------- --- --------------------------
/**
* 出力を取得する
* この方法を使用すると、出力するデータを取得して保存することができます
* 現在の出力文字列を返します
* 現在の出力文字列を返します
* @アクセス公開
* @戻り文字列
*/
関数get_output()
{
️戻る-- $this を返す->FINAL_OUTPUT;
}
// ----------------------------------------------- --- --------------------------
/**
* 出力を設定します
*
* 出力文字列を設定します
* 出力文字列を設定します
* @アクセス公開
* @パラメータ文字列
* @return void
*/
関数 set_output($output)
{
$this->final_output = $output;
$this を返します。
}
// ----------------------------------------------- --- --------------------------
/**
* 出力を追加
* 最終出力文字列の後にデータを追加します
* 出力文字列にデータを追加します
*
* @アクセス公開
* @パラメータ文字列
* @return void
*/
関数append_output($output)
{
if ($this->final_output == '')
$this->final_output = $output;
}
その他
$this->final_output .= $output;  
}
$this を返します。  
}
// ----------------------------------------------- ---------------------
/**
* ヘッダーを設定します
* このメソッドを使用すると、ブラウザに送信する HTTP プロトコルのヘッダーを設定できます。これは、PHP の標準関数 header() に相当します。
* 最終的な表示で出力されるサーバーヘッダーを設定できます。
* 最終的な表示出力のサーバーヘッダーを設定できます。
* 注: ファイルがキャッシュされている場合、ヘッダーは送信されないことを理解する必要があります
* ヘッダーデータをキャッシュデータと一緒に保存することを許可する方法...
*
* @アクセス公開
* @パラメータ文字列
* @param bool
* @return void
*/
function set_header($header, $replace = TRUE)
{
// zlib.output_compression が有効な場合、出力が圧縮されます。
// ただし、
の补偿を補うためにコンテンツ長ヘッダーは変更されません
// 削減减少还原により、追加のデータを待機している間にブラウザがハングします。  
// そのような場合は、content-length をスキップします。  
if ($this->_zlib_oc && strncasecmp($header, 'content-length', 14) == 0)
{
戻る;  
}
$this->headers[] = array($header, $replace);  
$this を返します。  
}
// ----------------------------------------------- ---------------------
/** 
* コンテンツ タイプ ヘッダーを設定します
* 設置Content-Type
* @access public
* @param 文字列 出力するファイルの拡張子
* @return void
     */
関数 set_content_type($mime_type)
{
if (strpos($mime_type, '/') === FALSE)
{
$extension = ltrim($mime_type, '.');  
// この拡張機能はサポートされていますか?  
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);  
$this を返します。  
}
// ----------------------------------------------- ---------------------
/**
* 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 スーパー オブジェクトが利用可能になる前に発生します
グローバル $BM、$CFG
// 可能であればスーパー オブジェクトを取得します
// // もちろん、スーパーコントローラーが手に入るなら、まずそれを手に入れます。
if (class_exists('CI_Controller'))
$CI =& get_instance();
}
--------------------------------------
// 出力データを設定します
if ($output == '')
$output =& $this->final_output;
}
--------------------------------------
// コントローラーに
がない場合にのみ、キャッシュ ファイルを書き込む必要がありますか?
// 独自の _output() メソッドであり、キャッシュ ファイルを扱っていません。
// 上記の $CI オブジェクトの存在によって判断できます
// キャッシュ時間 > 0 の場合、$ CI スーパー オブジェクトが存在し、そのスーパー オブジェクトの下に _output メソッドが存在します
// _write_cache メソッドを呼び出してキャッシュ ファイルを書き込みます
if ($this->cache_expiration > 0 && isset($CI) && ! Method_exists($CI, '_output'))
$this->_write_cache($output);
}
--------------------------------------
// 経過時間とメモリ使用量を解析します。
// 次に、疑似変数をデータと交換します
// コードの実行時間とメモリ使用時間を計算します
$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)
;
$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);  
}
// 出力データに終了 が含まれる場合タグ
// プロフィール データを挿入した後、それらを削除し、再度追加します
// 如果标签、我们将删除、插入我们的性能分析代码後再追加回去
if (preg_match("|.*?|is", $output))
{
$output = preg_replace("|.*?|is", '', $output);  
$output .= $CI->profiler->run();  
$output .= '';
}
その他
$output .= $CI->profiler->run();
}
}
--------------------------------------
を使用して
// そうでない場合は、出力をそこに送信します。
中 // コントローラーに _output メソッドがある場合は、直接呼び出します
// データがブラウザに直接送信されない場合
if (method_exists($CI, '_output'))
$CI->_output($output);
}
その他
️ echo $output;
}
Log_message('debug', "ブラウザに送信された最終出力");
Log_message('debug', "合計実行時間: ".$elapsed);
}
// ----------------------------------------------- --- --------------------------
/**
* キャッシュファイルを書き込む
* キャッシュファイルを生成します
* @アクセス公開
* @パラメータ文字列
* @return void
*/
関数_write_cache($output)
{
cusingの使用
$CI =& get_instance();
// キャッシュパスを検索します
$path = $CI->config->item('cache_path');
$cache_path = ($path == '') APPPATH.'cache/' : $path;
// キャッシュ パスがフォルダーではない場合、または書き込みできない場合は、エラーが返されます。
if ( ! is_dir($cache_path) OR ! is_really_writable($cache_path))
log_message('error', "キャッシュ ファイルを書き込めません: ".$cache_path);
}
// $uri を取得します
$uri = $CI->config->item('base_url')
$CI->config->item('index_page')
$CI->uri->uri_string();
// キャッシュ ファイルを生成します。
$cache_path .= md5($uri);
if ( ! $fp = @fopen($cache_path, FOPEN_WRITE_CREATE_DESTRUCTIVE))
log_message('error', "キャッシュ ファイルを書き込めません: ".$cache_path);
戻る;
}
// キャッシュ ファイルの有効期限を計算します。
$expire = time() + ($this->cache_expiration * 60);
if (flock($fp, LOCK_EX))
{
fwrite($fp, $expire.'TS--->'.$output);  
flock($fp, LOCK_UN);  
}
その他
{
log_message('error', "次のファイルのファイル ロックを保護できません: ".$cache_path);  
戻る;  
}
fclose($fp);  
@chmod($cache_path, FILE_WRITE_MODE);  
log_message('debug', "書き込まれたキャッシュ ファイル: ".$cache_path);  
}
// ----------------------------------------------- ---------------------
/**
* キャッシュされたファイルを更新/提供します
* このメソッドは CodeIgniter.php で呼び出されます。このメソッドは出力をキャッシュします。
* CodeIgniter.php でこのメソッドを呼び出したときに出力がある場合、
* このリクエストの実行は直接終了し、キャッシュされた出力が直接応答されます。
*
* @アクセス公開
* @param オブジェクト構成クラス
* @param オブジェクト URI クラス
* @return void
*/
function _display_cache(&$CFG, &$URI)
{
// 保存保存経路径
$cache_path = ($CFG->item('cache_path') == '') ? APPPATH.'cache/' : $CFG->item('cache_path');  
// ファイルパスを構築します。  ファイル名は完全な URI の MD5 ハッシュです
// 1 つの保存ファイルに対する 1 つの標準の経路指定ファイル、保存ファイルは経路指定文字列に対する md5 暗号化です。
$uri = $CFG->item('base_url')。  
$CFG->item('index_page')。  
$URI->uri_string;  
$filepath = $cache_path.md5($uri);  
// この保存ファイルがない場合は、保存コンテンツが失われているため、FALSE を返すことができます。
if ( ! @file_exists($filepath))
{
FALSE を返します。  
}
// 保存されたファイルが存在するが、許可されていない場合は、保存されたコンテンツが失われ、同様に FALSE が返されます。
if ( ! $fp = @fopen($filepath, FOPEN_READ))
{
FALSE を返します。  
}
// 保存されているファイルにアクセスし、$fp を句文として使用します。次に、共有锁(读取)を取得します。
flock($fp, LOCK_SH);  
$cache = '';  
if (filesize($filepath) > 0)
{
$cache = fread($fp, filesize($filepath));  
}
// 解锁
flock($fp, LOCK_UN);  
// 关闭ファイル接続。
fclose($fp);  
// 以下このTS--->字样、只是CIの保存文書の内容
// 数字 + TS ---> 値で指定されています。この数字は作成時間を表します。
// この構造に準拠していない場合は、非 CI キャッシュ ファイルとみなされるか、ファイルが破損している可能性があります。
// キャッシュコンテンツの取得に失敗し、FALSE を返します。
// 埋め込まれたタイムスタンプを削除します
if ( ! preg_match("/(d+TS--->)/", $cache, $match))
FALSE を返します。
}
// ファイルの有効期限が切れている場合は削除します。
// キャッシュの有効期限が切れているかどうかを判断し、期限が切れた場合は削除します
if (time() >= trim(str_replace('TS--->', '', $match['1'])))
if (is_really_writable($cache_path))
@unlink($filepath);
log_message('debug', "キャッシュ ファイルの有効期限が切れました。ファイルは削除されました");
FALSE を返します。
}
}
// キャッシュを表示します
$this->_display(str_replace($match['0'], '', $cache));
Log_message('debug', "キャッシュ ファイルは現在のものです。ブラウザに送信しています。");
TRUE を返します
}
}
// 出力クラスの終了
/* ファイルの終わり Output.php */
/* 場所: ./system/core/Output.php */
http://www.bkjia.com/PHPjc/477678.html
www.bkjia.com
本当
http://www.bkjia.com/PHPjc/477678.html

技術記事 [php] ?php if ( !定義(BASEPATH)) exit(直接スクリプトアクセスは許可されません); /** * CodeIgniter * * PHP 5.1.6以降用のオープンソースアプリケーション開発フレームワーク * * @packag...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

PHPとPython:2つの一般的なプログラミング言語を比較します PHPとPython:2つの一般的なプログラミング言語を比較します Apr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

アクション中のPHP:実際の例とアプリケーション アクション中のPHP:実際の例とアプリケーション Apr 14, 2025 am 12:19 AM

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHP:Web開発の重要な言語 PHP:Web開発の重要な言語 Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

See all articles