Heim Backend-Entwicklung PHP-Tutorial CI框架源码翻阅-Output.php

CI框架源码翻阅-Output.php

Jun 13, 2016 am 11:16 AM
cache gt output return this

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

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');/** * CodeIgniter * * An open source application development framework for PHP 5.1.6 or newer * * @package		CodeIgniter * @author		ExpressionEngine Dev Team * @copyright	Copyright (c) 2008 - 2011, EllisLab, Inc. * @license		http://codeigniter.com/user_guide/license.html * @link		http://codeigniter.com * @since		Version 1.0 * @filesource */// ------------------------------------/** * Output Class * * Responsible 负责 for sending final output to browser * 负责把最终的输出发送到浏览器 * @package		CodeIgniter * @subpackage	Libraries * @category	Output * @author		ExpressionEngine Dev Team * @link		http://codeigniter.com/user_guide/libraries/output.html */class CI_Output {	/**	 * Current output string	 * 当前输出的字符串	 *	 * @var string	 * @access 	protected	 */	protected $final_output;	/**	 * Cache expiration time	 * 缓存终结的时间	 * @var int	 * @access 	protected	 */	protected $cache_expiration	= 0;	/**	 * List of server headers	 * 服务器头列表	 * @var array	 * @access 	protected	 */	protected $headers			= array();	/**	 * List of mime types	 * 	 * @var array	 * @access 	protected	 */	protected $mime_types		= array();	/**	 * Determines wether profiler is enabled	 * 是否启用分析器	 * @var book	 * @access 	protected	 */	protected $enable_profiler	= FALSE;	/**	 * Determines if output compression is enabled	 * 是否开启输出压缩	 * @var bool	 * @access 	protected	 */	protected $_zlib_oc			= FALSE;	/**	 * List of profiler sections	 * 分析器列表	 *	 * @var array	 * @access 	protected	 */	protected $_profiler_sections = array();	/**	 * Whether or not to parse variables like {elapsed_time} and {memory_usage}	 * 是否解析变量{elapsed_time} and {memory_usage}	 * 注意文档说这里有错误详见http://codeigniter.org.cn/user_guide/libraries/output.html	 * 最下方	 * @var bool	 * @access 	protected	 */	protected $parse_exec_vars	= TRUE;	/**	 * Constructor	 *	 */	function __construct()	{		// 返回配置项zlib.output_compression的值并赋给$this->_zlib_oc 		// 如果配置项中开启了输出压缩功能则	$this->_zlib_oc 的值为on		$this->_zlib_oc = @ini_get('zlib.output_compression');		// Get mime types for later		// 获取mimetype		if (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	 * 返回当前输出的字符串	 * @access	public	 * @return	string	 */	function get_output()	{		return $this->final_output;	}	// --------------------------------	/**	 * Set Output	 *	 * Sets the output string	 * 设置输出的字符串	 * @access	public	 * @param	string	 * @return	void	 */	function set_output($output)	{		$this->final_output = $output;		return $this;	}	// --------------------------------	/**	 * Append Output	 * 在最终输出字符串后,追加数据	 * Appends data onto the output string	 * 	 * @access	public	 * @param	string	 * @return	void	 */	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...	 *	 * @access	public	 * @param	string	 * @param 	bool	 * @return	void	 */	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	 * @access	public	 * @param	string	extension of the file we're outputting	 * @return	void	 */	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)	 * @access	public	 * @param	int		the status code	 * @param	string	 * @return	void	 */	function set_status_header($code = 200, $text = '')	{		set_status_header($code, $text);		return $this;	}	// --------------------------------	/**	 * Enable/disable Profiler	 * 允许你开启或禁用分析器	 * @access	public	 * @param	bool	 * @return	void	 */	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	 * 允许你在评测器启用时,控制(开/关)其特定部分	 * 	 * @access	public	 * @param	array	 * @return	void	 */	function set_profiler_sections($sections)	{		foreach ($sections as $section => $enable)		{			$this->_profiler_sections[$section] = ($enable !== FALSE) ? TRUE : FALSE;		}		return $this;	}	// --------------------------------	/**	 * Set Cache	 * 设置缓存以及缓存时间 	 * @access	public	 * @param	integer 其中 $time 是你希望缓存更新的 分钟 数	 * @return	void	 */	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.	 *	 * @access	public	 * @param 	string	 * @return	mixed	 */	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 
Nach dem Login kopieren
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was sind die Unterschiede zwischen Huawei GT3 Pro und GT4? Was sind die Unterschiede zwischen Huawei GT3 Pro und GT4? Dec 29, 2023 pm 02:27 PM

Viele Benutzer werden sich bei der Auswahl von Smartwatches für die Marke Huawei entscheiden. Viele Benutzer sind neugierig auf den Unterschied zwischen Huawei GT3pro und GT4. Was sind die Unterschiede zwischen Huawei GT3pro und GT4? 1. Aussehen GT4: 46 mm und 41 mm, das Material ist Glasspiegel + Edelstahlgehäuse + hochauflösende Faserrückschale. GT3pro: 46,6 mm und 42,9 mm, das Material ist Saphirglas + Titangehäuse/Keramikgehäuse + Keramikrückschale 2. Gesundes GT4: Mit dem neuesten Huawei Truseen5.5+-Algorithmus werden die Ergebnisse genauer. GT3pro: EKG-Elektrokardiogramm sowie Blutgefäß und Sicherheit hinzugefügt

Detaillierte Erläuterung der Verwendung von Return in der C-Sprache Detaillierte Erläuterung der Verwendung von Return in der C-Sprache Oct 07, 2023 am 10:58 AM

Die Verwendung von return in der C-Sprache ist: 1. Für Funktionen, deren Rückgabewerttyp ungültig ist, können Sie die Rückgabeanweisung verwenden, um die Ausführung der Funktion vorzeitig zu beenden. 2. Für Funktionen, deren Rückgabewerttyp nicht ungültig ist, ist die Funktion von Die Return-Anweisung dient dazu, die Ausführung der Funktion zu beenden. 3. Beenden Sie die Ausführung der Funktion vorzeitig wenn die Funktion keinen Wert zurückgibt.

Nachdem ich dem Unternehmen beigetreten war, verstand ich, was Cache ist. Nachdem ich dem Unternehmen beigetreten war, verstand ich, was Cache ist. Jul 31, 2023 pm 04:03 PM

Die Sache ist tatsächlich so. Zu diesem Zeitpunkt gab mir mein Leiter eine Perf-Hardware-Leistungsüberwachungsaufgabe. Während der Verwendung von Perf habe ich die folgenden Informationen eingegeben: Meine Aufgabe besteht darin, diese Cache-Ereignisse zu aktivieren normal gezählt werden. Aber der Punkt ist, ich habe keine Ahnung, was diese Fehlschläge und Belastungen bedeuten.

Fix: Snipping-Tool funktioniert unter Windows 11 nicht Fix: Snipping-Tool funktioniert unter Windows 11 nicht Aug 24, 2023 am 09:48 AM

Warum das Snipping-Tool unter Windows 11 nicht funktioniert Das Verständnis der Grundursache des Problems kann dabei helfen, die richtige Lösung zu finden. Hier sind die häufigsten Gründe, warum das Snipping Tool möglicherweise nicht ordnungsgemäß funktioniert: Focus Assistant ist aktiviert: Dies verhindert, dass das Snipping Tool geöffnet wird. Beschädigte Anwendung: Wenn das Snipping-Tool beim Start abstürzt, ist es möglicherweise beschädigt. Veraltete Grafiktreiber: Inkompatible Treiber können das Snipping-Tool beeinträchtigen. Störungen durch andere Anwendungen: Andere laufende Anwendungen können mit dem Snipping Tool in Konflikt geraten. Das Zertifikat ist abgelaufen: Ein Fehler während des Upgrade-Vorgangs kann zu diesem Problem führen. Diese einfache Lösung ist für die meisten Benutzer geeignet und erfordert keine besonderen technischen Kenntnisse. 1. Aktualisieren Sie Windows- und Microsoft Store-Apps

Wie ist die Ausführungsreihenfolge von Return- und Final-Anweisungen in Java? Wie ist die Ausführungsreihenfolge von Return- und Final-Anweisungen in Java? Apr 25, 2023 pm 07:55 PM

Quellcode: publicclassReturnFinallyDemo{publicstaticvoidmain(String[]args){System.out.println(case1());}publicstaticintcase1(){intx;try{x=1;returnx;}finally{x=3;}}}# Ausgabe Die Ausgabe des obigen Codes kann einfach zu dem Schluss kommen: return wird ausgeführt, bevor wir uns schließlich ansehen, was auf der Bytecode-Ebene passiert. Im Folgenden wird ein Teil des Bytecodes der Methode case1 abgefangen und mit dem Quellcode verglichen, um die Bedeutung jeder Anweisung darin zu kommentieren

So beheben Sie den Fehler „Verbindung zum App Store nicht möglich' auf dem iPhone So beheben Sie den Fehler „Verbindung zum App Store nicht möglich' auf dem iPhone Jul 29, 2023 am 08:22 AM

Teil 1: Erste Schritte zur Fehlerbehebung Überprüfen des Apple-Systemstatus: Bevor wir uns mit komplexen Lösungen befassen, beginnen wir mit den Grundlagen. Das Problem liegt möglicherweise nicht an Ihrem Gerät; die Server von Apple sind möglicherweise ausgefallen. Besuchen Sie die Systemstatusseite von Apple, um zu sehen, ob der AppStore ordnungsgemäß funktioniert. Wenn es ein Problem gibt, können Sie nur warten, bis Apple es behebt. Überprüfen Sie Ihre Internetverbindung: Stellen Sie sicher, dass Sie über eine stabile Internetverbindung verfügen, da das Problem „Verbindung zum AppStore nicht möglich“ manchmal auf eine schlechte Verbindung zurückzuführen ist. Versuchen Sie, zwischen WLAN und mobilen Daten zu wechseln oder die Netzwerkeinstellungen zurückzusetzen (Allgemein > Zurücksetzen > Netzwerkeinstellungen zurücksetzen > Einstellungen). Aktualisieren Sie Ihre iOS-Version:

Warum erhöht die Verwendung des Caches die Computergeschwindigkeit? Warum erhöht die Verwendung des Caches die Computergeschwindigkeit? Dec 09, 2020 am 11:28 AM

Die Verwendung des Caches kann die Geschwindigkeit des Computers erhöhen, da der Cache die Wartezeit der CPU verkürzt. Cache ist ein kleiner, aber schneller Speicher, der zwischen der CPU und dem Hauptspeicher DRAM liegt. Die Funktion des Cache besteht darin, die Dateneingabe- und -ausgaberate der CPU zu erhöhen. Der Cache hat eine geringe Kapazität, aber eine hohe Geschwindigkeit, während die Speichergeschwindigkeit niedrig ist, aber eine große Kapazität aufweist. Durch die Optimierung des Planungsalgorithmus wird die Leistung des Systems verbessert stark verbessert.

Was ist Cache? Was ist Cache? Nov 25, 2022 am 11:48 AM

Cache wird als Cache-Speicher bezeichnet. Es handelt sich um einen Hochgeschwindigkeitsspeicher mit geringer Kapazität, der im Allgemeinen aus Hochgeschwindigkeits-SRAM besteht um die Lücke zwischen CPU und Speicher zu verringern oder zu beseitigen. Die Auswirkung des Geschwindigkeitsunterschieds zwischen ihnen auf die Systemleistung. Die Cache-Kapazität ist klein, aber schnell, die Speichergeschwindigkeit ist niedrig, aber die Kapazität ist groß. Durch die Optimierung des Planungsalgorithmus wird die Leistung des Systems erheblich verbessert.

See all articles